Это решение, основанное на подсчете количества каждого символа и проверке того, что во втором слове меньше каждого символа:
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;
}
Это решение подсчитывает количество каждого символа во входной строке, а затем проверяет, встречается ли каждый символ в строке проверки меньше раз, чем во входной строке. Это решение довольно декларативное.