三九宝宝网宝宝百科宝宝知识

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

02月25日 编辑 39baobao.com

[求N个字符串的最长公共子串]求N个字符串的最长公共子串,N<=20,字符串长度不超过255。例如:N=3,由键盘依次输入三个字符串为What is local bus ?Name some local buses.local bus is a high speed I/O bus close...+阅读

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

2. 原理:

(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);

}

如何获取多个字符串中最长的共同子字符串

package chuan;

public class MaxSubstring {

//获取两个字符串中最大相同子串。

/**

* 思路:1、将短的那个子串按照长度递减的方式获取到。

* 2、用长串去判断是否包含每次获取到的子串,若包含则就找到最大相同子串

* param s1

* param s2

* return max substring

*/

public static String getMaxsubstring(String s1,String s2)

{

String max="",min="";

max=(s1.length()>s2.length())?s1:s2;

min=(max==s1)?s2:s1;

for(int i=0;i

{

for(int j=0,k=min.length()-i;k!=min.length()+1;j++,k++)

{

String temp=min.substring(j,k);

//System.out.println("temp--:"+temp);

if(max.contains(temp))

return temp;

}

}

return "";

}

/**

* param args

*/

public static void main(String[] args) {

String xx="abcdefghij",yy="34cdefgff";

String dd=MaxSubstring.getMaxsubstring(xx,yy);

System.out.println(dd);

}

}

C语言:键入一个不超过100字符的字符串输出其中最长子字符串和

代码文本:

#include "stdio.h"

int main(int argc,char *argv[]){

char str[101],i,j,k,x,y,m,f;

printf("Enter a string...\nstr=");

scanf("%100s",str);

for(k=0;str[k];k++);

for(f=m=i=0;i

for(j=k-1;j>i;j--)

if(str[j]==str[i]){

for(y=j,x=i;x

if(str[x]-str[y])

break;

if(x>=y & m<=j-i){

m=j-i+1;

f=i;

break;

}

}

printf("\nThe longest palindromic substring is\n\t\'");

for(i=0;i

printf("\'\nThe length is %d\n",m);

return 0;

}

求两个字符串的最长公共子串要求输入两个字符串输出他们的最

遍历一下就好了,java代码:

public class CommonSubString {

public String search(String s1,String s2)

{

String max = "";

for(int i=0; i

{

for(int j=i; j

{

String sub = s1.substring(i,j);

if((s2.indexOf(sub)!=-1)&sub.length()>max.length())

{

max = sub;

}

}

}

return max;

}

public static void main(String[] args)

{

String s1 = "abcdefghigj";

String s2 = "xyzabcdefigj";

String output = new CommonSubString().search(s1,s2);

System.out.println(output);

}

}

以下为关联文档:

java输入年份月份要求打印出两个月的日历哪两个月? 使用方法: public static void main(String[] args) { int year = 2010; int month = 11; MyCalendar curMonth = new MyCalendar(year,month); MyCalendar preMont...

java怎么替换字符串中的字符public static void main(String[] args) { String str="some str"; str=str.replace('s','a'); // 按字符来进行替换,所有字符会被替换 str=str.replace("a","s"); // 按字符串来进...

求VB程序输入年月日求星期几Dim myYear, myMonth, myDay, myWeek, Days As Integer Dim myDate As String myYear = Val(TextY.Text) myMonth = Val(TextM.Text) myDay = Val(TextD.Text) If myYear999...

求ios能用的日语手写输入法多元输入法(多元汉字与图形符号输入法)是一种可在互联网上输入所有汉字且能输入にほんご、한국어等世界上大多数国家文字的创新工具。具有下列特色: ①见字即输入:汉字笔形近似...

软件自学网excel2007如何制电子表格遇到输入字符多的时候新编计算机办公自动化基础教程 Excel 2003/2007电子表格制作 ? ? ? ? 第一节 Excel 2003使用入门 ?第八节 使用图表 第二节 创建工作簿 第三节 编辑工作表 第四节 编辑单元格 ?第...

字符串比较函数strcp比较的是字符串的什么你是问strcmp函数么? strcmp函数是比较两个字符串的大小,返回比较的结果。一般形式是: strcmp(字符串1,字符串2); ①字符串1小于字符串2,strcmp函数返回一个负值; ②字符串1等于字...

写两个字符串比较是否相等的函数相等返回1不等返回0不能用库int compare(char *a, char *b) { while(*a || *b) { if( *a != *b) return 0; a++; b++; } return 1; } 这个函数没有用库函数,函数体内没有设一个变量,效率应该是非常高吧。...

如何用两个字符串生成一个唯一的数字参考做法:将这两个字串合并,生成合并字串的MD5.MD5的作用:MD5的作用是让大容量信息在用数字签名软件签署私人密钥前被"压缩"成一种保密的格式(就是把一个任意长度的字节串变换成一...

SQL判断字符串是否在目标字符串中的函数根据需求,写了一段方法。 用于识别以下的情况: 判断 字符串A 在用逗号分隔的字符串B中是否存在如: v_str_a = aa ; v_str_b= aa,bb,dd,cc ; 如上,就返回Y,否则返回N. 添加了一些校...

推荐阅读
图文推荐