检查字符串是否可以由C#中的另一个字符串的字符组成

时间:2011-04-02 05:30:50

标签: c# .net string

如果一个单词可以用另一个单词的字母组成,如何检查。每个字母只使用一次。

示例:

如果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    

2 个答案:

答案 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;
}