public static bool IsAnagramOf(this string word1, string word2)
{
return word1.OrderBy(x => x).SequenceEqual(word2.OrderBy(x => x));
}
我目前正在从包含所有英文单词的大型xml文件中提取所有内容。然后我将每个单词与给定的字符串进行比较,看看它是否是一个字谜。我然后存储每个正确的单词并返回它们。
...然而
我想要这样做,因此字谜不必具有相同的字符串长度。
例如:“Hello”包含“Hello”,“Hell”,“He”等......
有没有这样做的代码相对较小?
谢谢!
编辑:所以包括subanagrams以及相等长度的字谜。
答案 0 :(得分:3)
也许你的方法应该被称为ContainsTheSameSetOfLetters
?
public static bool ContainsTheSameSetOfLetters(this string word1, string word2)
{
var chars = new HashSet<char>(word1);
return word2.All(x => chars.Contains(x));
}
如果您关心使用特定字母的时间,您可以使用以下内容:
public static bool ContainsTheSameSetOfLetters(string word1, string word2)
{
var chars = word1.GroupBy(x => x).ToDictionary(g => g.Key, g => g.Count());
return word2.GroupBy(x => x).All(g => chars.ContainsKey(g.Key) && chars[g.Key] >= g.Count());
}
答案 1 :(得分:0)
尝试创建一个检查序列以另一个序列开始的扩展方法,而不是使用SequenceEqual。