Как я могу оптимизировать мой код к заданию Codewars "Scramblies"?

Как я могу оптимизировать мой код к этому заданию? https://www.codewars.com/kata/55c04b4cc56a697bb0000048/train/csharp

Complete the function scramble(str1, str2) that returns true if a portion of str1 characters can be rearranged to match str2, otherwise returns false.

using System;
public class Scramblies 
{
    
    public static bool Scramble(string str1, string str2) 
    {
       int counter = 0;
string remberStr = "";
for (int i = 0; i < str2.Length; i += 1)
{
    for(int j = 0; j < str1.Length; j++)
    {
        if (str1[j] == str2[i])
        {
            if  ((str1.Length - str1.Replace(str2[i] + "", "").Length) == (str2.Length - str2.Replace(str2[i] + "", "").Length) || remberStr.Contains(str2[i]) == false)
            {
                remberStr += str2[i];
                counter++;
                break;
            }
        }
        
    }
}
return (counter == str2.Length) ? true : false;
    }

}

Ответы (1 шт):

Автор решения: MarkShcerbakov

Ну самое простое решение, чтобы необходимые буквы из состава второго слова появлялись в первом слове как минимум столько же раз. Делается это примерно так:

using System.Linq;
static bool Scramble(string str1, string str2) 
 => str2.All(x => str1.Split(x).Length >= str2.Split(x).Length);

Здесь All - применяет к каждой букве второго слова условие сравнения кол-ва входящих букв. Split - разделяет строки по букве и получается кол-во ее вхождений (уменьшение длины на 1 опущено, так как не играет роли в данном примере).

→ Ссылка