我创建了3 strings
:
string a = "abcdgfg";
string b = "agbfcd";
string c = "axcvn";
我想创建以下检查,但我无法了解如何:
需要检查在string a
和string b
中是否存在相同的后置者(更不用说顺序或者如果后者显示多次,只需检查两个字符串上是否出现相同的后者)。
然后我需要对string a
和string c
执行相同的检查。
正如您所看到的那样:string a
和string b
具有相同的后置者,stringa a
和string c
没有。
在我进行检查后,如果琴弦具有相同的后者,我只需打印按摩
有谁能告诉我如何进行咀嚼?
修改:
检查“a”和“c”后,它应该打印出第一个后来出现的“a”和“c”之间不匹配
由于
答案 0 :(得分:4)
我建议使用HashSet<T>
并使用SetEquals
:
var aSet = new HashSet<char>(a);
var bSet = new HashSet<char>(b);
bool abSame = aSet.SetEquals(b);
修改强>
在检查“a”和“c”之后,它应该打印出来的第一个后者 “a”和“c”之间不匹配
然后您可以使用HashSet.SymmetricExceptWith
:
if (!abSame)
{
aSet.SymmetricExceptWith(bSet);
Console.WriteLine("First letter that is either in a and not in b or in b and not in a: " + aSet.First());
}
顺便说一句,这也可以取代SetEquals
支票:
aSet.SymmetricExceptWith(bSet); // removes all characters which are in both
if (aSet.Any()) // missing charaters in one of both strings
{
Console.WriteLine("First letter that is either in a and not in b or in b and not in a: " + aSet.First());
}
使用Except
+ Any
的原始答案有一个微妙的错误。如果有重复,检查长度是不够的。因此,您需要从两个方向进行检查或首先使用Distinct
。与作为O(n)操作的HashSet.SetEquals
- 方法相比,这两种方法都是低效的。
bool abSame = !a.Except(b).Any() && !b.Except(a).Any();
答案 1 :(得分:4)
private bool HaveSameLetters(string a, string b)
{
return a.All(x => b.Contains(x)) && b.All(x => a.Contains(x));
}
答案 2 :(得分:2)
需要检查字符串a和字符串b中是否存在相同的后者(不要介意顺序或后者显示多次,只需要检查后者是否出现在同一个字符串中)。
你可以这样做:
bool same = a.Distinct().OrderBy(c => c)
.SequenceEqual(b.Distinct().OrderBy(c => c));
这只是对两个字符串的字符进行排序,并检查两个有序序列是否相等。您可以对a
和c
使用相同的方法。