C# 检查 2 个字符串是否包含相同的字符
本文关键字:包含相 字符 是否 字符串 检查 | 更新日期: 2023-09-27 18:19:10
我创建了 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"之间不匹配
谢谢
我建议使用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();
private bool HaveSameLetters(string a, string b)
{
return a.All(x => b.Contains(x)) && b.All(x => a.Contains(x));
}
需要检查字符串 a 和字符串 b 中是否有相同的后者(不要介意顺序,或者如果后者显示多次,只需要检查两个字符串上是否出现相同的后者(。
你可以这样做:
bool same = a.Distinct().OrderBy(c => c)
.SequenceEqual(b.Distinct().OrderBy(c => c));
这只是对两个字符串的字符进行排序,并检查两个有序序列是否相等。您可以对a
和c
使用相同的方法。