不知道为什么笔试总是遇到这些题目,看来经典算法,大家都喜欢啊,这个是LCS问题,动态规划。
问题:求两个字符串的最长公共子串,字母可以不相邻,但是顺序不变
代码:
public class lcs {
public static void LCS_Print(String str1, String str2) {
int length1 = str1.length();
int length2 = str2.length();
int list[][] = new int[length1 + 1][length2 + 1];//初始全为0
int i;//行
int j;//列
// 标记
for (i = length1 - 1; i >= 0; i--) {
for (j = length2 - 1; j >= 0; j--) {
if (str1.charAt(i) == str2.charAt(j)) { //相同
list[i][j] = list[i + 1][j + 1] + 1;
} else {//不同
list[i][j] = Math.max(list[i + 1][j], list[i][j + 1]);
}
}
}
// 计算lcs
i = 0;
j = 0;
while (i < length1 && j < length2) {
if (str1.charAt(i) == str2.charAt(j)) {//斜着走
System.out.print(str1.charAt(i));
i++;
j++;
} else if (list[i + 1][j] >= list[i][j + 1]) {//向下走
i++;
} else{//向左走
j++;
}
}
System.out.println();
}
public static void main(String[] args) {
String str1 = "abcddeesdd";
String str2 = "asadaaddss";
lcs.LCS_Print(str1, str2);
}
}
分享到:
相关推荐
本文实例讲述了JavaScript自定义函数实现查找两个字符串最长公共子串的方法。分享给大家供大家参考,具体如下: //查找两个字符串的最长公共子串 function findSubStr(s1,s2){ var S=sstr= ,L1=s1.length,L2=s2....
本文实例讲述了C语言求两个字符串的最长公共子串的方法。分享给大家供大家参考。具体实现方法如下: #include "stdio.h" #include "string.h" #include "stdlib.h" void getCommon(char str1[],char str2[],char * ...
主要介绍了java实现求两个字符串最长公共子串的方法,是一道华为OJ上的一道题目,涉及Java针对字符串的遍历、转换及流程控制等技巧,需要的朋友可以参考下
主要介绍了PHP实现求两个字符串最长公共子串的方法,涉及php字符串与数组的遍历、运算、判断等相关操作技巧,需要的朋友可以参考下
求N个字符串的最长公共子串,N,字符串长度不超过255。例如N=3,由键盘依次输入3个字符串为 Whatislocalbus? Namesomelocalbuses. loca1busisahighspeedI/Obusclosetotheprocessor. 则最长公共子串为“local...
在随意给出的2个字符串中,找出它们共同的最长的子串。 【输入】 输入文件的第一行为一个整数2,接下来有2行,每行为一个字符串,每个字符串的长度均小于255。 【输出】 输出只有一行,即:共同的最长子串,若有多个...
输入一个字符串,将输出该字符串最长对称子串及其长度,很精巧的算法
把两个源字符串分别放在两个文本文件里,再把这两个文本文件放在程序所在目录下,运行时输入两个文件名就可以了.
今天小编就为大家分享一篇python实现求两个字符串的最长公共子串方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
编写程序求出所给出的字符串中最长的字母子串(以非字母隔开)。例如字符串"Apple$12pear watermelon $ # Banana"中最长的字母子串为"watermelon"。有详细的解释
通过编辑距离算法对两字符串相似度对比后顺序取出所有公共子串
输入两个字符串, 求它们最长公共字串的长度
找出一个字符串的最长子串,很简单.......
该文件实现了在两个字符串中寻找最大子串的算法,并附上代码,方便大家学习。
用本程序可得到字符串的相似度和字符串的公共子串以及编辑距离。
自己编写的C++程序,求两个字符串的最长公共字串。例如a="abcrrrerads",b="afdabcssbcrrresswrds",则结果为bcrrre