試試這個。這不是最佳的,但它工作得很好
static int FindMatch(string text, string pattern)
{
var total = 0;
for (int i = 0; i < pattern.Length; i++)
{
var max = 0;
for (int j = 2; j <= pattern.Length - i; j++)
{
var temp = pattern.Substring(i, j);
if (text.Contains(temp))
if (max < temp.Length)
max = temp.Length;
}
total += max;
if (max > 0)
i += max-1;
}
return total;
}
FindMatch("Audible xxx-xxx-5051 NJ", "xx Audible 5");
收益10
FindMatch("yy Audible", "xx Audible 5");
返回8
FindMatch("Audible 5 xy", "xx Audible 5");
回到9
FindMatch("Audible.com 5", "xx Audible 5");
回報9太多,而不是7,因爲正如我在這個例子中可以理解爲空間5「5」
我不明白爲什麼它是第一個案件的9。在字符串「xx Audible 5」中,我們有「xx」首先是「Audible」。你如何在你的問題中定義匹配? – xuanluong
按照你的規則(空格數),第一個例子的結果應該是10.也就是「Audible xx」。這是10個字符。另外,如果空格計數,那麼#2的結果應該是8.無論是那個還是你需要改進你的規則。例如,如果字符串是「Audible」(即8個空格,單詞「Audible」),結果是15還是7?如果是「xx Audible」會怎麼樣? –
@jim我已更新它。感謝您的支持。所以它總是匹配的數量(超過1)加在一起 – user1112324