C# 检查 2 个字符串是否包含相同的字符

本文关键字:包含相 字符 是否 字符串 检查 | 更新日期: 2023-09-27 18:19:10

我创建了 3 个strings

string a = "abcdgfg";
string b = "agbfcd";
string c = "axcvn";

我想创建以下检查,但找不到方法:需要检查string a中是否有相同的后者,string b后者是否存在相同的后者(不要介意顺序,或者如果后者显示多次,只需要检查相同的后者是否出现在两个字符串上(。然后我需要对string astring c进行相同的检查。

如您所见:string astring b具有相同的后者,stringa astring c没有。

检查后,我只需打印按摩,如果琴弦是否具有相同的后者

谁能告诉我如何做检查?

编辑

检查"A"和">

C"后,它应该打印出现的第一个后者,并且"A"和"C"之间不匹配

谢谢

C# 检查 2 个字符串是否包含相同的字符

我建议使用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));

这只是对两个字符串的字符进行排序,并检查两个有序序列是否相等。您可以对ac使用相同的方法。