检查字符串中另一个字符串中的所有字母,而无需重复C#

时间:2018-06-21 14:14:52

标签: c#

我正在尝试将一个单词与另一个单词(原始单词)进行比较,以查看是否包含原始单词的所有字母,而不重复任何单词。例如

案例1:

  • 原始单词=某个单词
  • 要检查的字=门
  • 结果:正确,在原始单词中找到所有字母。
  • 评分:4分(满分4分)

案例2:

  • 原始单词=某个单词
  • 要检查的单词=单词
  • 结果:不正确,重复e超过原始单词。
  • 得分:5(共7分)

希望到目前为止,这会有所帮助:

foreach (var c in _word)
{
    if (_starting_string.Contains(c))
    {
        score++;
    }
    else
        return null;             
    }
}

如果score包含字母但尚未被重复/使用,我需要为_word中的每个字母增加_starting_string。有解决方案吗?

亲切的问候。

3 个答案:

答案 0 :(得分:0)

为什么不简单地建立两个以字符为键,出现次数为值的字典呢?

var map1 = _startingString.GroupBy(x => x).ToDictionary(x => x.Key, x => x);
var map2 = _word.GroupBy(x => x).ToDictionary(x => x.Key, x => x);

最后比较字典中每个字符的计数:

foreach(var kv in map1)
{
    if(map2.ContainsKey(kv.Key) && map2[kv.Key].Count() !=  map1[kv.Key].Count)
        throw new Exception(...);
}

答案 1 :(得分:0)

string startingWord = "someword";
string checkWord = "door";

List<char> list = startingWord.ToList();

int score = 0;

for (int i = 0; i < checkWord.Length; i++)
{
    if (list.Any(c => c == checkWord[i])
    {
        score++;
        list.RemoveAt(list.FirstIndex(c => c == checkWord[I]));
    }
}

bool match = score == checkWord.Length;

答案 2 :(得分:0)

这似乎奏效了,谢谢。

List<char> _startingstring_list = startingstring.ToList();
foreach (char c in word)
            {
                if (_startingstring_list.Contains(c))
                {
                    score++;
                    _startingstring_list.Remove(c);

                }
                else
                    return null;
            }