Ранее уже высказывались предположения, что, возможно, регулярное выражение - не лучший способ сделать это, и я согласен, однако, ваш принятый ответ немного многословен, учитывая то, что вы пытаетесь достичь, и это тест, чтобы увидеть, набор букв является подмножеством другого набора букв.
Рассмотрим следующий код, который выполняет это в одной строке кода:
MatchString.ToList().ForEach(Item => Input.Remove(Item));
Что можно использовать следующим образом:
public bool IsSubSetOf(string InputString, string MatchString)
{
var InputChars = InputString.ToList();
MatchString.ToList().ForEach(Item => InputChars.Remove(Item));
return InputChars.Count == 0;
}
Затем вы можете просто вызвать этот метод, чтобы проверить, является ли он подмножеством или нет.
Здесь интересно то, что «got» вернет список без элементов, потому что каждый элемент в строке совпадения появляется только один раз, а «gott» вернет список с одним элементом, потому что будет только один вызов убрать «т» из списка. Следовательно, вы бы оставили пункт в списке. Таким образом, «gott» не является подмножеством «catdog», а «gott» есть.
Вы можете сделать еще один шаг вперед и поместить метод в статический класс:
using System;
using System.Linq;
using System.Runtime.CompilerServices;
static class extensions
{
public static bool IsSubSetOf(this string InputString, string MatchString)
{
var InputChars = InputString.ToList();
MatchString.ToList().ForEach(Item => InputChars.Remove(Item));
return InputChars.Count == 0;
}
}
, который превращает ваш метод в расширение строкового объекта, что в конечном итоге значительно облегчает работу, так как теперь вы можете делать свои вызовы следующим образом:
Console.WriteLine("gott".IsSubSetOf("catdog"));