Всем Привет!
Сделал программу и функцию в ней которая должна делать следующее, ищет в строке подстроку максимальной длины, состоящую из одного и того же символа, и выдает эту максимальную длину. Например, есть строка " аааббдеггггв ", должно выдаться число 4, потому что есть 4 подряд символа «г», и это максимальная подстрока, где подряд идет один и тот же символ. Функция работает без учета регистра.
Проблема возникает при наличии пустой строки или пробелов? программа выдаёт 1, как для случая отсутствия вообще одинаковых букв?
думал решить проблему с помощью метода char.IsWhiteSpace но у меня получается только для 1 пробела??
Подскажите пожалуйста как поправить код чтобы учитывал корректно пробелы и пустую строку?
public static int GetMaxLengthSubstring(string s)
{
int length = 1;
int maxLength = 1;
s = s.ToUpper();
for (int i = 1; i < s.Length; ++i)
{
char currentSymbol = s[i];
char previousSymbol = s[i - 1];
if (currentSymbol == previousSymbol)
{
length++;
if (length > maxLength)
{
maxLength = length;
}
}
else
{
length = 1;
}
}
return maxLength;
}
static void Main(string[] args)
{
Console.WriteLine("Длина максимальной подстроки в строке 45645555645456 = " + GetMaxLengthSubstring("45645555645456"));
Console.WriteLine("Длина максимальной подстроки в строке аааббдеггггв = " + GetMaxLengthSubstring("аааббдеггггв"));
Console.WriteLine("Длина максимальной подстроки в строке 112233555 = " + GetMaxLengthSubstring("112233555"));
Console.WriteLine("Длина максимальной подстроки в строке Эйяфьятлайокудль = " + GetMaxLengthSubstring("Эйяфьятлайокудль"));
Console.WriteLine("Длина максимальной подстроки в строке аааббдегГггв = " + GetMaxLengthSubstring("аааббдегГггв"));
Console.WriteLine("Длина максимальной подстроки в строке аааббдегГггв = " + GetMaxLengthSubstring(" "));
Console.ReadKey();
Используйте string.IsNullOrWhiteSpace:
public static int GetMaxLengthSubstring(string s)
{
if (string.IsNullOrWhiteSpace(s))
{
return 0;
}
int length = 1;
int maxLength = 1;
//...
}
UPD. Для проверки символа в строке на пробельный используйте char.IsWhiteSpace(currentSymbol)
var text = "аааббдеггггв";
var count = 0;
foreach (var letter in text.Distinct().ToArray())
{
var temp = text.Count(chr => chr == letter);
if (count < temp)
count = temp;
}
Console.WriteLine($"Максимальное количество подряд идущих букв {count}");
вот решение которое на много меньше по коду и работает правильно
public static int GetMaxLengthSubstring(string s)
{
int length = 0, maxLength = 0;
for (int i = 1; i < s.Length; ++i)
{
char currentSymbol = s[i];
char previousSymbol = s[i - 1];
if (currentSymbol == previousSymbol)
{
length++;
if (length > maxLength)
maxLength = length;
}
else
length = 1;
}
return maxLength;
}
Console.WriteLine("Длина максимальной подстроки в строке Эйяфьятлайокудль = " + GetMaxLengthSubstring("аааббдеггггв ".ToLower()));
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Есть массив Buttons, из которого необходимо выбрать Mins чисел и занести это все в массив fakeButtons PS Желательно не через LINQ
Доброе время сутокПодскажите, написал небольшую программу для установки сертификатов УЦ в корневые и промежуточные центры, программа вылетает...
Подскажите, как сделать подобное на js? Есть картинка по наведению на которую появляется окно в увеличенным изображениемЭдакий эффект лупы