Я боролся с онлайн-соревнованием по программированию, которое попросило меня получить сумму всех подстрок ввода числовых строк , когда я обнаружил исключение, связанное с памятью.
Например, для ввода «123» желаемым выходом является «164». https://www.hackerrank.com/challenges/sam-and-substrings/problem
Проблема казалась простой, и я нашел решение для динамического программирования. То, что я сделал, было восходящим подходом, который собрал все подстроки и добавил их вместе.
Я думаю, что само решение было правильным, потому что оно прошло более 50% тестовых случаев. Вот мое простое решение:
static int substrings(string n)
{
decimal totalSubstring = 0;
for (var i = 0; i < n.Length; i++)
{
for (var j = 1; j <= n.Length - i; j++)
{
var strNumber = n.Substring(i, j);
decimal number = Convert.ToDecimal(strNumber);
totalSubstring = totalSubstring + (number);
}
}
return (int)(totalSubstring % 1000000007);
}
Однако, когда он получил длинную строку (например, строку, содержащую более 6426 символов), ни один примитивный тип не смог бы содержать длинную преобразованную подпрограмму-string.
Я знаю, что ошибка звучит совершенно логично, хотя я не знаю, как обрабатывать длинные строки.
Пожалуйста ПРИМЕЧАНИЕ , что я не ищу точного ответа, и я хочу решить проблему самостоятельно. Я был бы рад, если бы кто-то мог дать мне подсказку или сказать мне, если это решение может быть исправлено.
Спасибо