【发布时间】:2013-06-11 22:35:51
【问题描述】:
我正在使用 C# 来查找两个字符串之间的所有公共子字符串。例如,如果输入是: S1 = "需要电子邮件帮助" S2="需要电子邮件帮助"
输出应该是-'需要帮助电子邮件'
下面的代码返回最长的公共子字符串,但我希望我的代码返回所有公共子字符串。任何帮助深表感谢!
static void commonsubstrings()
{
input1 = "need asssitance with email";
input2 = "email assistance needed"
if (input2.Length > input1.Length)
{
swap = input1;
input1 = input2;
input2 = swap;
}
int k = 1;
String temp;
String longTemp = "";
for (int i = 0; (i <= input1.Length); i++)
{
if ((i == input1.Length))
{
if (longest != null)
{
k = longest.Length + 1;
}
else
{
k = 1;
}
temp = input1.Substring(1, input1.Length - 1);
if (temp.Equals(""))
{
break;
}
if (k <= temp.Length)
{
i = k - 1;
input1 = temp;
if ((longest != null) && (longest.Length > longTemp.Length))
{
longTemp = longest;
}
}
}
holder1 = input1.Substring(0, k);
for (int j = 0; (j < input2.Length) && (j + k <= input2.Length); j++)
{
check1 = input2.Substring(j, k);
if (holder1.Equals(check1))
{
longest = holder1;
break;
}
}
k++;
}
Console.WriteLine(longest);
Console.ReadLine();
}
【问题讨论】:
-
所有常见的子字符串?单个字符? “Ema”和“Emai”和“Email”是三个不同的匹配子串吗?
-
您的意思是 input1 中有太多“s”字符吗?这是问题的一部分还是错字?你是想说“协助”和“协助”很常见吗?
-
如何从所有子字符串转到所需的输出,“需要帮助电子邮件”?
-
可能值得研究 diff-match-patch code.google.com/p/google-diff-match-patch 我们已将它用于此功能并取得了巨大成功。
-
从提供的示例中,看起来这是所有常见的单词,而不是所有常见的子字符串。如果是这种情况,我会将两个字符串拆分为单词数组,然后只使用嵌套的 for 循环来比较数组。
标签: c#