繁体   English   中英

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

[英]Check if a string can be made by chars of another string in C#

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

例:

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

这是一个基于计算每个字符数量的解决方案,然后检查第二个单词中每个字符的数量是否更少:

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

此解决方案计算输入字符串中每个字符的数量,然后检查检查字符串中的每个字符是否出现的次数少于输入字符串中的字符数。 这个解决方案相当明确。

以下应该做的伎俩

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM