Как я могу оптимизировать мой код к заданию 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 опущено, так как не играет роли в данном примере).