【发布时间】:2010-06-18 23:10:07
【问题描述】:
我需要找出一个字符串在另一个字符串中包含多少百分比或字符。 我已经尝试过 Levenshtein Distance 但该算法返回需要更改多少字符才能使字符串相等。 有人可以帮忙吗? 我在 c# 中需要它,但这并不重要。
答案代码: 公共双 LongestCommonSubsequence(字符串 s1,字符串 s2) { //如果任一字符串为空,则长度必须为0 if (String.IsNullOrEmpty(s1) || String.IsNullOrEmpty(s2)) 返回 0;
int[,] num = new int[s1.Length, s2.Length]; //2D array
char letter1;
char letter2;
//Actual algorithm
for (int i = 0; i < s1.Length; i++)
{
letter1 = s1[i];
for (int j = 0; j < s2.Length; j++)
{
letter2 = s2[j];
if (letter1 == letter2)
{
if ((i == 0) || (j == 0))
num[i, j] = 1;
else
num[i, j] = 1 + num[i - 1, j - 1];
}
else
{
if ((i == 0) && (j == 0))
num[i, j] = 0;
else if ((i == 0) && !(j == 0)) //First ith element
num[i, j] = Math.Max(0, num[i, j - 1]);
else if (!(i == 0) && (j == 0)) //First jth element
num[i, j] = Math.Max(num[i - 1, j], 0);
else // if (!(i == 0) && !(j == 0))
num[i, j] = Math.Max(num[i - 1, j], num[i, j - 1]);
}
}//end j
}//end i
return (s2.Length - (double)num[s1.Length - 1, s2.Length - 1]) / s1.Length * 100;
} //end LongestCommonSubsequence
【问题讨论】:
-
字符的顺序重要吗?
-
您缺少示例。这个问题很模糊。
-
我不写例子很糟糕,好吧它们是:) 例如:string a = John Malkovich;字符串 b = 约翰·马尔科维奇;这些字符串之间的差异是 2 个字符,或者它们是相同的 84.6%。前任。 2:字符串 a = 约翰·马尔科维奇;字符串 b = Jonh Malkovich;他们是相同的 84.6% 希望我这会有所帮助。
-
"hcivoklaM nhoJ"怎么样,"John Malkovich"的反面。是0%相似还是84.6%也相似?