不知道为什么笔试总是遇到这些题目,看来经典算法,大家都喜欢啊,这个是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....
在本题目中,任务是使用定长顺序存储结构表示串,并找出两个字符串的最长公共子串。这是一个典型的字符串处理问题,通常在计算机科学和编程领域出现。以下是对这个任务的详细解析: 首先,我们需要理解“定长顺序...
在编程领域,最长公共子串(Longest Common Substring,LCS)问题是一个经典的问题,它寻找两个或多个字符串中的最长连续子序列,这个子序列同时存在于所有字符串中。在这个问题中,我们专注于PHP如何解决两个字符串...
在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...
通过上述分析,我们可以看到,这段程序实现了对两个字符串的最长公共子串的有效计算。尽管其实现方式相对简单,但对于理解和学习动态规划的基本思想具有很好的参考价值。此外,在实际应用中,还可以考虑使用更高效的...
通过编辑距离算法对两字符串相似度对比后顺序取出所有公共子串
编写程序求出所给出的字符串中最长的字母子串(以非字母隔开)。例如字符串"Apple$12pear watermelon $ # Banana"中最长的字母子串为"watermelon"。有详细的解释
最长公共子串(Longest Common Substring,LCS)是一个在计算机科学中常见的字符串处理问题,它涉及到查找两个或多个字符串中的最长连续子序列,这个子序列同时存在于所有字符串中。MFC,全称为Microsoft Foundation...
通过以上方法,可以有效地找出两个字符串中的最长相同子串。本例中,最长的相同子串是 `"abcd"`。这种方法虽然简单直观,但在处理非常大的字符串时可能会遇到性能问题。为了提高效率,可以考虑使用动态规划等更高级...
`indexOf()` 方法可以接受一个或两个参数: - **单参数**:`indexOf(String str)` - 只提供一个子字符串作为参数。 - **双参数**:`indexOf(String str, int fromIndex)` - 提供一个子字符串和一个起始索引值。从...
在Java编程中,实现字符串匹配并...总之,Java实现字符串匹配求两个字符串的最大公共子串是一个涉及字符串处理和动态规划的经典问题。通过理解上述算法思想和代码实现,开发者可以有效地处理文本数据的比较和分析任务。
用本程序可得到字符串的相似度和字符串的公共子串以及编辑距离。
根据给定的信息,本文将详细解析“求两个字符串的最长公共子串”的算法实现与原理。此题目在编程领域较为常见,特别是在字符串处理与算法设计方面。下面将从多个角度来探讨这一问题。 ### 一、问题定义 题目要求找...
两个字符串里求最长的公共子串
PTA 7-29 删除字符串中的子串