我想从字符串中取出每个单词,并且需要检查它是否与另一个字符串相同。两个字符串的单词顺序可能不同。但它应该会返回真实的结果。
例如:
StringtoCompareWith="hi you should do this";
InputString1="you hi should this do";
InputString2="you hi ";
比较" InputString1"与" StringtoCompareWith"它应该返回一个真实的结果。如果它与" InputString2"它将返回false。我怎样才能以最快的方式实现这一目标?
答案 0 :(得分:3)
拆分两个字符串并使用Except
,但同时检查两者是否包含相同数量的字词。
var StringtoCompareWith = "hi you should do this";
var InputString1 = "you hi should this do";
var first = StringtoCompareWith.Split();
var second = InputString1.Split();
bool isEqual = first.Length == second.Length && !first.Except(second).Any();
答案 1 :(得分:1)
相同的答案,但使用foreach循环。在这里你可以将句子分成单词并检查两个数组中的一个是否包含每个单词。
以下是代码:
using System;
public class Program
{
public static void Main()
{
string StringtoCompareWith="hi you should do this";
string InputString1="you hi should this do";
string InputString2="you hi ";
bool isEqual = CheckString(StringtoCompareWith, InputString1);
//bool isEqual = CheckString(StringtoCompareWith, InputString2);
Console.WriteLine(isEqual ? "Both are equals" : "Not equal");
}
public static bool CheckString(string inp1, string inp2){
string[] split1 = inp1.Split(' ');
string[] split2 = inp2.Split(' ');
//Worst case: when lenght are not same
if(split1.Length != split2.Length)
return false;
else{
//Time complexity: O(n)
foreach(string s1 in split1){
if(!inp1.Contains(s1))
return false;
}
}
return true;
}
}
以下是链接:dotNetFiddler
答案 2 :(得分:0)
在Space上拆分字符串,只保留not null值,然后检查它们是否都在SequenceEqual的引用数组中。如果需要,您还可以从列表中清除重复项。
string StringtoCompareWith = "hi you should do this";
string InputString1 = "you hi should this do";
string InputString2 = "you hi ";
var result = StringtoCompareWith.Split(new string[] { " " }, StringSplitOptions.RemoveEmptyEntries).OrderBy(x => x)
.SequenceEqual(InputString1.Split(new string[] { " " }, StringSplitOptions.RemoveEmptyEntries).OrderBy(x => x));
答案 3 :(得分:0)
这是一种方法 -
string StringtoCompareWith = "hi you should do this";
string InputString1 = "you hi should this do";
string InputString2 = "you hi";
var arr1 = StringtoCompareWith.Split(' ');
var arr2 = InputString1.Split(' ');
bool check = arr1.Count() == arr2.Count() ? ((arr1.Intersect(arr2).Count() == arr1.Count()) ? true : false) : false;
所以我将StringtoCompareWith
与InputString1
进行比较,您可以根据自己的需要进行更改。