如果一个单词可以用另一个单词的字母组成,如何检查。每个字母只使用一次。
示例:
如果str = "computer";
则
//if user enters below words output must be true
comp
put
poet
//and if user enters below words output must be false
count // since n is not in str
root // since there is only single o in str
答案 0 :(得分:5)
这是一个基于计算每个字符数量的解决方案,然后检查第二个单词中每个字符的数量是否较少:
public static bool UsesSameLetters(string input, string check)
{
var OriginalCounts = input.GroupBy(c => c)
.ToDictionary(g => g.Key, g => g.Count());
bool Success = check.GroupBy(c => c)
.All(originalCounts.ContainsKey(g.Key)
&& originalCounts[g.Key] >= g.Count);
return Success;
}
此解决方案计算输入字符串中每个字符的数量,然后检查检查字符串中的每个字符是否出现的次数少于输入字符串中的字符数。这个解决方案相当明确。
答案 1 :(得分:3)
以下应该做的伎俩
public static bool UsesSameLetters(string input, string check) {
var array = new BitArray(check.Length, false);
for (var i = 0; i < input.Length; i++) {
var found = false;
for (var j = 0; j < check.Length; j++) {
if (input[i] == check[j] && !array.Get(j)) {
array.Set(j, true);
found = true;
break;
}
}
if (!found) {
return false;
}
}
return true;
}