我正在尝试将一个单词与另一个单词(原始单词)进行比较,以查看是否包含原始单词的所有字母,而不重复任何单词。例如
案例1:
案例2:
希望到目前为止,这会有所帮助:
foreach (var c in _word)
{
if (_starting_string.Contains(c))
{
score++;
}
else
return null;
}
}
如果score
包含字母但尚未被重复/使用,我需要为_word
中的每个字母增加_starting_string
。有解决方案吗?
亲切的问候。
答案 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;
}