Я пытаюсь сравнить две std :: strings и решить, является ли строка A такой же, как строка B, но с вставкой или удалением одного символа. В противном случае он возвращает false. Например: «старт» и «STRT» или «объявление» и «добавить» В настоящее время:Есть ли альтернатива использованию str.substr() для извлечения подстроки в данной позиции?
if(((sizeA - sizeB) != 1)
&& ((sizeB - sizeA) != 1))
{
return false;
}
if(sizeA < sizeB)
{
for(int i = 0; i < sizeA; ++i)
{
if(stringA[i] != stringB[i])
{
if(stringA.substr(i)
== stringB.substr(i + 1))
{
return true;
}
else return false;
}
}
} //with another loop that runs only if stringA is larger than stringB
Это работает безупречно, но дргиЙ говорит мне, что эта функция в настоящее время увязла. Я попытался преобразовать цикл for, чтобы использовать итераторы для доступа к символам, но это удвоило мое время выполнения. Ive сузил его до использования std :: string.substr(), потому что он строит новые строки каждый раз, когда stringA и stringB различаются по размеру на 1.
Когда первый символ отличается, мне нужен более эффективный способ чтобы проверить, должен ли я удалить этот символ, будут ли две строки равны?
Элегантное решение и большое использование алгоритмов std. – Kleist