我需要比較一些字符串,並檢查是否可以在另一個字符串中找到每個由空格分隔的字段。
某些字段可以在串A不存在,但在任何情況下,字段將是相同的順序檢查字符串上的每個字段是否在另一個字符串中
實施例:
String A: AAA CCC DDD
String B: AAA BBB CCC DDD
確定
String A: AAA CCC DDD
String B: AAA BBB DDD
也不行
我將使用C#,但一個通用的算法也可以很好
我需要比較一些字符串,並檢查是否可以在另一個字符串中找到每個由空格分隔的字段。
某些字段可以在串A不存在,但在任何情況下,字段將是相同的順序檢查字符串上的每個字段是否在另一個字符串中
實施例:
String A: AAA CCC DDD
String B: AAA BBB CCC DDD
確定
String A: AAA CCC DDD
String B: AAA BBB DDD
也不行
我將使用C#,但一個通用的算法也可以很好
您可以在空白處同時使用兩個字符串split,然後使用Enumerable.Except
檢查是否有任何不匹配的元素。
if(stringA.Split().Except(stringB.Split()).Any())
{
//extra elements present
}
這是你在找什麼?它檢查源字符串中的每個部分是否在要與之比較的字符串中。
var sourceString = "AAA CCC DDD";
var compareTo = "AAA BBB CCC DDD";
sourceString.Split(' ').All(x=>compareTo.Contains(x));
這其中可能產生假陽性,例如對於'A'和'AA',你應該返回'false',但是你的方法會返回'true',因爲'A'是'AA'的一個子串。 – dasblinkenlight
好吧,發現我的錯 –
所以,如果我理解正確結果爲真只有當B包含相同的字段作爲一個以相同的順序與選擇在這裏和 - 插有一些額外的領域。好的算法給出具有至多N個步驟在最壞的情況下,答案其中N是字段中B.
僞代碼:
FA = fields of A
FB = fields of B
if len(FB) < len(FA):
return False
ia = 0
ib = 0
while ia < len(FA):
if FA[ia] == FB[ib]:
ia += 1
ib += 1
else:
ib += 1
if len(FB)-ib < len(FA)-ia:
return False
# we finished with the loop, ia reached len(FA)
return True
謝謝你,這個工作 – Jorgel