我正在尝试编写一个程序,该程序的一部分是找到两个字符串之间的相似性。你问用户字符串中应该有多少相似的字母。
例如:
string1 = aghilfamjijasrnlklk;
string2 = dfdfkkjhklkfnajnvfo;
用户类型3,
程序打印:
klk is similar in both
starts at index 16, ends at 19 in string 1
starts at index 8, ends at 11 in string 2
我尝试过:
for (int i = 0; i <= search; i++) {
if (string1.regionMatches(i, string2, 0, substringlength)) {
found = true;
System.out.print("Match found!");
break;
}
}
我会做得更多,但我完全停滞不前,不知道该怎么办;我在编码时相当新。
答案 0 :(得分:0)
我猜这样做的方法是使用LCS算法(最长公共子序列),最后只需要算法给你的第一个X量的Chars。 (当然,这不是计算最快的算法,但算法几乎完全由其他人编写)
作为一个例子,LCS(计算机,uouthgr)会给你一个字符串值“outr”,如果用户只想要3个字符给他subString为“out”。
以下是我在网上找到的LCS代码(需要进行修改以达到您的目的):
公共类LCS {
public static void main(String[] args) {
String x = StdIn.readString();
String y = StdIn.readString();
int M = x.length();
int N = y.length();
// opt[i][j] = length of LCS of x[i..M] and y[j..N]
int[][] opt = new int[M+1][N+1];
// compute length of LCS and all subproblems via dynamic programming
for (int i = M-1; i >= 0; i--) {
for (int j = N-1; j >= 0; j--) {
if (x.charAt(i) == y.charAt(j))
opt[i][j] = opt[i+1][j+1] + 1;
else
opt[i][j] = Math.max(opt[i+1][j], opt[i][j+1]);
}
}
// recover LCS itself and print it to standard output
int i = 0, j = 0;
while(i < M && j < N) {
if (x.charAt(i) == y.charAt(j)) {
System.out.print(x.charAt(i));
i++;
j++;
}
else if (opt[i+1][j] >= opt[i][j+1]) i++;
else j++;
}
System.out.println();
}
}
有关详细信息,我建议您阅读: https://en.wikipedia.org/wiki/Longest_common_subsequence_problem
但如果你像我一样,我会建议更多人在youtube上寻找关于这个主题的视频!