2013-05-04 100 views
4

我想一個字符串在C#中的數據進行比較的字符串,在這個例子中字符串比較用字符

string Text1 = "123bob456"; 
string Text2 = "bobishere"; 

我想說,如果多於3(或更多)字符的序列匹配,則返回true,在這種情況下,它們都是真的,因爲它們都包含「bob」。
但我不知道如何做到這一點,如果這是一個重複的問題,我可以幫助和抱歉,我知道如何說出來。

+0

難道必須匹配所有三個字符,或者是它的三個字符序列? – 2013-05-04 20:57:17

+0

忘了補充,我的意思是順序 – user2279389 2013-05-04 20:57:42

回答

6

您的問題是longest common substring problem,它可以在時間上與兩個字符串的長度之和成比例地求解。查看可能算法的鏈接。

如果您願意採取一點性能打擊,您可以更簡單地考慮第一個字符串中的每個3個字符序列,然後在第二個字符串中搜索該序列。下面是一個例子(我不是很熟悉C#,所以請原諒任何語法錯誤):

for (int i = 0; i < s1.Length - 2; i++) 
    if (s2.Contains(s1.Substring(i, 3))) 
     return true; 
return false; 

你的選擇將取決於您的特定問題。如果速度太慢,我會嘗試第二種方法並修改。

+0

所以你會推薦什麼?,而對於後面的一個,我打算用400個字符串做這個,所以我寧願它快一點。 – user2279389 2013-05-04 21:04:17

+0

從's1.Length - 3'到's1.Length - 2'來捕捉匹配子字符串在's1'結尾的情況。 – 2013-05-04 21:09:25

+1

你可以使用's2.Contains(s1.Substring(i,3))'來方便閱讀。 – 2013-05-04 21:09:35

1

該擴建工程:

public static bool ContainsSubstring(this string string1, string string2, int minLength, StringComparison comparison) 
{ 
    if (minLength <= 0) throw new ArgumentException("Minimum-length of substring must be greater than 0", "minLength"); 
    if (string.IsNullOrEmpty(string1) || string1.Length < minLength) return false; 
    if (string.IsNullOrEmpty(string2) || string2.Length < minLength) return false; 

    for (int i = 0; i < string1.Length - minLength + 1; i++) 
    { 
     string part1 = string1.Substring(i, minLength); 
     if (string2.IndexOf(part1, comparison) > -1) 
      return true; 
    } 
    return false; 
} 

例如:

string Text1 = "123bob456"; 
string Text2 = "bobishere"; 
bool contains = Text1.ContainsSubstring(Text2, 3, StringComparison.CurrentCultureIgnoreCase); // true 

Demo

+1

這也適用,我將其保存到我的課程之一謝謝 – user2279389 2013-05-04 22:08:46