Я написал решение для поиска самой длинной подстроки Палиндроми c в строке. Код:
int index = 0, maxie = 0, N = s.length();
string result;
while(index < N){
int left = index, right = index, length = 1;
while(left >= 0 && right < N && s[left] == s[right]){
if(length > maxie){
maxie = length;
result = s.substr(left, maxie);
}
length+= 2;
left--;
right++;
}
left = index, right = index + 1;
length = 0;
while(left >= 0 && right < N && s[left] == s[right]){
length+= 2;
if(length > maxie){
maxie = length;
result = s.substr(left, maxie);
}
left--;
right++;
}
index++;
}
return result;
Я не очень разбираюсь в анализе сложности времени, хотя прошел через основы, когда циклы ПРОСТЫ.
Но в этом случае я понимаю, что внешний l oop будет работать N раз. Но я не могу понять временную сложность внутренних циклов, так как они будут иметь переменное время работы, основанное на значении String и Current Index of Outer L oop.
Я предполагаю, что наихудший возможный случай для этой проблемы было бы, где все буквы одинаковы. Как 'aaaaa'.
Чтобы упростить объяснение, если я предполагаю, что функция substr требует постоянного времени, как мне рассчитать общую сложность этого алгоритма по времени?
Заранее спасибо. Любая помощь очень ценится.