Итак, у меня есть строка s, которую я повторяю n раз. Например, у меня есть «аба» и n = 10, и я хочу найти количество букв «а». Итак, в этом случае (абаабаабаа) у нас есть 7 «а». Я написал следующий код, который проходит некоторые тестовые случаи, но когда n велико, я получаю сообщение об ошибке: завершение вызывается после создания экземпляра 'std::bad_alloc. Есть ли способ это исправить? Спасибо.
long repeatedString(string s, long n) {
long i = 0, j = 0, cnt = 0;
long sz = s.size();
vector<char> ar;
while (i < n)
{
ar.push_back(s[j]);
j++;
if (j >= sz)
{
j = 0;
}
i++;
}
i = 0;
while (i < n)
{
if (ar[i] == 'a')
{
cnt++;
}
i++;
}
return cnt;
}
ar
заранее.ar.reserve(n)
- person ChrisMM   schedule 24.02.2020n
, прежде чем он выйдет из строя? Если вы повторитеs
много миллиардов раз, у вас может просто не хватить памяти для представления результирующей строки. - person François Andrieux   schedule 24.02.2020n
. Вы все еще можете сделать это, не генерируя всю строку. Либо подсчитайте'a'
s вместо генерацииar
. Вы также можете подсчитать'a'
вs
, умножить это наn / s.size()
, а затем перебрать толькоs
дляn % s.size()
символов, чтобы увидеть, сколько завершающих'a'
нужно добавить к счету. - person François Andrieux   schedule 24.02.2020