c语言求连续公共子串长度(多个字符串最长公共子串)

今天给各位分享c语言求连续公共子串长度的知识,其中也会对多个字符串最长公共子串进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

本文目录一览:

1、求两个输入的字符串的最长公共子串2、C语言 最长公共子串3、C语言实现最长公共子串与最长公共子序列

求两个输入的字符串的最长公共子串

算法:求两个字符串的最长公共子串

原理:

(1) 将连个字符串分别以行列组成一个矩阵。

(2)。若该矩阵的节点对应的字符相同,则该节点值为1。

(3)当前字符相同节点的值 = 左上角(d[i-1, j-1])的值 +1,这样当前节点的值就是最大公用子串的长。

(s2)  b  c    d  e

(s1)

a             0  0    0   0

b             1   0   0   0

c             0    2   0  0

d             0    0   3  0

3. 结果:只需以行号和最大值为条件即可截取最大子串

C# code:

[csharp] view plaincopyprint?

public static string MyLCS(string s1, string s2)

{

if (String.IsNullOrEmpty(s1) || String.IsNullOrEmpty(s2))

{

return null;

}

else if (s1 == s2)

{

return s1;

}

int length = 0;

int end = 0;

int[,] a = new int[s1.Length, s2.Length];

for (int i = 0; i  s1.Length; i++)

{

for (int j = 0; j  s2.Length; j++)

{

int n = (i – 1 = 0  j – 1 = 0) ? a[i – 1, j – 1] : 0;

a[i, j] = s1[i] == s2[j] ? 1+n : 0;

if (a[i, j]  length)

{

length = a[i,j];

end = i;

}

}

}

return s1.Substring(end – length + 1, length);

}

C语言 最长公共子串

首先指出楼主的错误

最长的公共子字符串 应该改成 最长的连续公共子字符串

下面是符合楼主要求的参考代码

//作者:baihacker

//时间:9.12.2006

#include stdio.h

#include string.h

void main()

{

char* x=”aabcdababce”;

char* y=”12abcabcdace”;

int m = strlen(x);

int n = strlen(y);

int i, j, k, l;

int maxlength = 0;

int start = 0;

int count = 0;//用来判断是否匹配的变量

for (i=1;i=n;i++)//匹配长度的循环

for (j=0;jn-i+1;j++)//y的起始位置的循环

for (k=0;km-i+1;k++)//x的起始位置的循环

{

count = 0;

for (l=0;li;l++)//判断是否匹配,代码可以优化

if (y[j+l] == x[k+l])

count++;

if (count==iimaxlength)

{

maxlength = i;//记录最大长度

start = j;//记录最大长度的起起位置

}

}

//作者:baihacker

//时间:9.12.2006

#include stdio.h

#include string.h

void main()

{

char* x=”aabcdababce”;

char* y=”12abcabcdace”;

int m = strlen(x);

int n = strlen(y);

int i, j, k, l;

int maxlength = 0;

int start = 0;

int count = 0;//用来判断是否匹配的变量

for (i=1;i=n;i++)//匹配长度的循环

for (j=0;jn-i;j++)//y的起始位置的循环

for (k=0;km-i;k++)//x的起始位置的循环

{

count = 0;

for (l=0;li;l++)//判断是否匹配,代码可以优化

if (y[j+l] == x[k+l])

count++;

if (count==iimaxlength)

{

maxlength = i;//记录最大长度

start = j;//记录最大长度的起起位置

}

}

if (maxlength==0)

printf(“No Answer”);

else

for (i=0;imaxlength;i++)

printf(“%c”,y[start+i]);

}

}

下面是真正的最长公共子串的动态规划算法

//作者:baihacker

//时间:9.12.2006

#include stdio.h

#include string.h

int b[50][50];

int c[50][50];

void lcs(x,m,y,n)

char *x;

int m;

char *y;

int n;

{

int i;

int j;

for (i=1;i=m;i++) c[i][0] = 0;

for (i=1;i=n;i++) c[0][i] = 0;

c[0][0] = 0;

for (i=1;i=m;i++)

for (j=1;j=n;j++)

{

if (x[i-1] == y[j-1])

{

c[i][j] = c[i-1][j-1] + 1;

b[i][j] = 1;

}

else

if (c[i-1][j] c[i][j-1])

{

c[i][j] = c[i-1][j];

b[i][j] = 2;

}

else

{

c[i][j] = c[i][j-1];

b[i][j] = 3;

}

}

}

void show(i,j,x)

int i;

int j;

char* x;

{

if (i==0||j==0)

return;

if (b[i][j]==1)

{

show(i-1,j-1,x);

printf(“%c”,x[i-1]);

}

else

if (b[i][j]==2)

show(i-1,j,x);

else

show(i,j-1,x);

}

void main()

{

char* x=”aabcdababce”;

char* y=”12abcabcdace”;

int m = strlen(x);

int n = strlen(y);

lcs(x,m,y,n);

show(m,n,x);

}

c语言求连续公共子串长度(多个字符串最长公共子串)

C语言实现最长公共子串与最长公共子序列

给定两个字符串s1=”GeeksforGeeks”,s2=”GeeksQuizGo”,则它们的最长公共子串为“Geeks”,长度为5。

运用动态规划的思想,将两个字符串映射为一张二维表,表格中的值代表到当前为止的最长公共子串的值,如下图所示:

生成这张表的步骤(假设这张表为t[][], r为行标,c为列标):

Code

整个算法的时间复杂度为O(len1 * len2),len1与len2分别为两个字符串的长度。

最长公共子序列与最长公共子串的区别是,最长公共子序列不要求“连续匹配”,它的目的是找到两个字符串中最大的公共部分。依然以s1=”GeeksforGeeks”,s2=”GeeksQuizGo”为例,它们的最长公共子序列为“Geekso”和“GeeksG”,长度为6。

它的二维表如下所示:

它的生成步骤与最长公共子序列的最大不同在第3步,最长公共子序列在遇到s1[r] != s2[c]情况时,不会将t[r][c]重置为0,而是选择Max(t[r-1][c], t[r][c-1])作为新值,即它一直保存着前面已比较序列的最长公共序列值。

关于c语言求连续公共子串长度和多个字符串最长公共子串的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。

本文来自投稿,不代表【】观点,发布者:【

本文地址: ,如若转载,请注明出处!

举报投诉邮箱:253000106@qq.com

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2024年4月4日 00:07:11
下一篇 2024年4月4日 00:16:23

相关推荐

  • java截取指定长度字符串,java截取指定字符串之后的

    java中如何截取字符串中的指定一部分 第一个参数是开始截取的字符位置。(从0开始)第二个参数是结束字符的位置+1。(从0开始)indexof函数的作用是查找该字符串中的某个字的位置,并且返回。 int end);截取s中从begin开始至end结束时的字符串,并将其赋值给s;split讲解:java.lang.string.split split 方法 将…

    2024年5月23日
    4400
  • c语言用string定义字符串,c语言中用string类型来处理字符串类型

    C++怎样定义定义字符串 1、第一是字符数组来表示字符串。用下面的语句声明:char a[10];C语言中字符数组与字符串的唯一区别是字符串末尾有一个结束符\0,而字符数组不需要。 2、在C中定义字符串有下列几种形式:字符串常量,char数组,char指针 字符串常量 即:位于一对双括号中的任何字符。双引号里的字符加上编译器自动提供的结束标志\0字符,作为 …

    2024年5月23日
    4500
  • java获取字符串指定字符,java获取字符串指定字符的位置

    java如何读取字符串中的某一段字符串 1、在Java中获取字符串中指定的值可以使用以下几种方式:点击学习大厂名师精品课使用substring()方法可以使用String类提供的substring(intbeginIndex,intendIndex)方法,从原始字符串中截取出指定范围的字符子串。 2、第一个参数是开始截取的字符位置。(从0开始)第二个参数是结…

    2024年5月23日
    4200
  • excel数字字符串是什么,excel中数字字符串

    Excel中的数据类型都有什么呢? 1、excel的数据类型包括数值型数据、字符型数据、逻辑型数据、日期型数据。字符型数据:在Excel中,字符型数据包括汉字、英文字母、空格等,每个单元格最多可容纳32000个字符。 2、Excel工作表中的数据有四种类型,分别是文本、数值(含日期时间)、逻辑、出错值。文本类型就是平常所输入的汉字、空格、英文字母。数值型的数…

    2024年5月23日
    3900
  • c语言怎么输入数组,c语言怎么输入数组字符串

    如何用c语言从键盘输入10个数存入数组并求和? 1、用C语言编写一段程序,用来输入10个整数保存到数组中,求出这10个整数的和并输出。 2、,数组是相同数据类型的元素的集合。 2,数组中的各元素的存储是有先后顺序的,它们在内存中按照这个先后顺序连续存放在一起。 3,数组元素用整个数组的名字和它自己在数组中的顺序位置来表示。 3、void main(){ fl…

    2024年5月23日
    4000
  • c语言将字符串内字符进行替换,c语言截取字符串中的某一段字符

    C语言中如何替换一个字符串中的字符 打开visual C++ 0-文件-新建-文件-C++ Source File。定义变量:#include stdio.hvoid main(){ char c1,c2,c3; /*定义字符变量*/。 第一步,依次单击visual C ++ 0的“文件”–“新建”–“文件”–“C++ S…

    2024年5月23日
    3800
  • java怎么实现多个接口,java多个接口有相同的方法

    java中接口可以实现多个接口吗? 1、但接口不存在这样的问题,接口全都是抽象方法继承谁都无所谓,所以接口可以继承多个接口。 2、首先,java中的接口别说实现多个接口了,一个接口也不能实现。因为接口中的方法是没有方法体的,所以不能实现任何接口。其次,一个接口可以继承多个接口。 3、java中没有多继承(就是不能继承多个父类),只有多重继承。 java怎么定…

    2024年5月23日
    3500
  • javaexcel列变成数字,java列表转化为字符串

    JAVA导出excel,数字如何去掉小三角?就是变成数字格式 单元格较少时可通过直接设置去掉小三角。选定单元格区域,在其上点鼠标右键——“设置单元格格式”,点“数字”标签——“常规”或“数值”。双击鼠标左键取消倒三角。利用“分列”功能去掉小三角。 应该是单元格变为文本格式。如是数字,而又想要显示前导0,比如00002,则可以设置:工具→选项→错误检查→把“数…

    2024年5月23日
    4500
  • 字符串转化json数组java,java将字符串转换为json对象的方法

    Java中如何将含空格的字符串如何转换成JSON 1、net.sf.json.JSONArray jsonArr = net.sf.json.JSONArray.fromObject(json);这个可以。 2、json_obj= json.loads(str)望采纳。 3、这段代码中,ObjectMapper类是Jackson库中的一个核心类,用于将Jav…

    2024年5月23日
    5500
  • java如何给字符串命名,java中如何给字符串赋值

    java中如何以给定的字符串为名字创建某个类的实例? 1、你就是相用p1来表示一个对象吧。直接生成叫p1的对象是不行的,可以使用变型。 2、当你从某渠道读取对方传递来的字符串,比如{class:A;[a:100;b:200;c:300]},你就要手动去解析这段字符串,来恢复一个A的实例对象。 3、根据 parent 抽象路径名和 child 路径名字符串创建…

    2024年5月23日
    5300

发表回复

登录后才能评论



关注微信