不知道为什么笔试总是遇到这些题目,看来经典算法,大家都喜欢啊,这个是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语言中,求两个字符串的最长公共子串是一个经典的问题,它涉及到字符串处理和算法。最长公共子串是指在两个或多个字符串中都存在的、且长度最长的连续字符序列。这个问题在文本处理、数据比较和生物信息学等领域...
求N个字符串的最长公共子串,N,字符串长度不超过255。例如N=3,由键盘依次输入3个字符串为 Whatislocalbus? Namesomelocalbuses. loca1busisahighspeedI/Obusclosetotheprocessor. 则最长公共子串为“local...
求两个字符串的最长公共子串 思想:建立一个二维数组,保存连续位相同与否的状态 ''' def getNumofCommonSubstr(str1, str2): lstr1 = len(str1) lstr2 = len(str2) record = [[0 for i in range(lstr2+1)] for j...
如果一个字符串s是另一个字符串t的子串,并且s同时存在于两个或多个字符串中,那么s就被称为这些字符串的公共子串。例如,对于字符串"abcde"和"ace",它们的公共子串有"","a","c","e","ac","ce"。 现在,我们要寻找...
根据给定文件的信息,本文将详细介绍如何在两个字符串中寻找最大公共子串的算法实现。 ### 一、问题背景 在计算机科学中,查找两个字符串中的最大公共子串是一个非常实用的问题,它广泛应用于文本处理、生物信息学...
本文实例讲述了PHP实现求两个字符串最长公共子串的方法。分享给大家供大家参考,具体如下: 前面一篇PHP实现求解最长公共子串问题的方法是基于java改进而来,这里再来看另一种公共子串算法。 代码如下: <?php $...
编写程序求出所给出的字符串中最长的字母子串(以非字母隔开)。例如字符串"Apple$12pear watermelon $ # Banana"中最长的字母子串为"watermelon"。有详细的解释
最长公共子串(Longest Common Substring,LCS)是一个在计算机科学中常见的字符串处理问题,它涉及到查找两个或多个字符串中的最长连续子序列,这个子序列同时存在于所有字符串中。MFC,全称为Microsoft Foundation...
两个字符串里求最长的公共子串
PTA 7-29 删除字符串中的子串
在给定的压缩包文件中,我们可以看到它包含了用于开发和编译C++程序的相关文件,这表明我们将讨论如何用C++实现寻找两个字符串的最长公共子串的算法。 "最长公共子串"是指在两个或多个字符串中,长度最长的那个相同...
标题中的“求两字符串的最长公共子字符串”指的是在两个给定的字符串中找到它们共有的最长连续子串。这是一个经典的计算机科学问题,通常在字符串处理、文本比较和算法设计中出现。描述提到的“用穷举法完成”,指的...
**最长公共子串(Longest Common Substring, LCS)**是两个或多个字符串中的最长字符串,该字符串同时也是这些字符串的子串。这里需要注意区分子串与子序列的概念。子串必须在原字符串中连续出现,而子序列则不必...
同时,这个题目也可以作为基础,进一步探索其他更复杂的问题,比如最长公共子序列(允许子序列不连续)或者在多个字符串中找到最长公共子串等。通过实践和练习,可以提高对字符串处理和算法设计的理解,这对于任何IT...
c源码编写的求两个字符串的最长公共子串,采用递归算法
自己闲来没事写的字符串删除,事件复杂度为 n 欢迎大家讨论
题目中给出的标签“判断子串”提示我们,我们需要编写一个程序或函数,接受两个字符串作为输入,并返回一个布尔值,表示第二个字符串是否为第一个字符串的子串。 在编程中,有多种方法可以实现这个功能。以下是一些...
从一个给定的串中删去(不一定连续地删去)0个或0个以上的字符,剩下的字符按原来顺序组成的串是该串的子串。例如: “”,“a”,“xb”,“aaa”,“bbb”,“xabb”,“xaaabbb”都是串“xaaabbb”的子串。 编程求N...