Вычисление самой длинной подстроки Palindrome в строке

85
10

У меня есть следующий код для вычисления самой длинной подстрочной строки палиндрома в строке. Онлайн-судья принимает решение O (n ^ 2), но я не знаю, почему он не принимает мое решение, хотя кажется, что мой алгоритм O (n ^ 2) по сложности.


class Ideone {

public static void main(String args[]) {
Ideone ob = new Ideone();
String s = "sds";
System.out.println(ob.longestPalindrome(s));

}

public String longestPalindrome(String s) {
int maxlength = 1;

String ps = s.charAt(0) + "";

if (s.length() == 1)
return s;
for (int i = 0; i < s.length() - 1; i++) {
int j = (s.substring(i + 1)).indexOf(s.charAt(i)) + i + 1;
while (j < s.length() && j > i) {
if (j - i + 1 > maxlength && check(s.substring(i, j + 1))) {

maxlength = j - i + 1;
ps = s.substring(i, j + 1);

}
if ((s.substring(j + 1)).indexOf(s.charAt(i)) < 0) {
break;
}
j = (s.substring(j + 1)).indexOf(s.charAt(i)) + j + 1;

}
}

return ps;
}

public boolean check(String s) {
int l = s.length();
if (l == 1)
return false;
int t = l / 2;
String s1, s2;
if (l % 2 == 0) {
s1 = s.substring(0, t);
s2 = s.substring(t);

} else {
s1 = s.substring(0, t);
s2 = s.substring(t + 1);

}

s2 = (new StringBuffer(s2)).reverse().toString();

if (s1.compareTo(s2) == 0)
return true;
else return false;
}

}

спросил(а) 2020-03-25T14:20:28+03:00 2 месяца назад
1
Решение
111

Сначала загляните в две петли и метод check(), который нуждается в O (n), чтобы перевернуть строку, может привести к O (n³).


Имейте в виду, что такие методы, как:

    String.indexOf(..)
    String.substring(..)
    String.compareTo(..)
    StringBuffer.reverse(..)
    String.toString()

Нужно перебирать данные и, следовательно, нуждаться в O (n), а не постоянном времени.

ответил(а) 2020-03-25T14:35:11.566235+03:00 2 месяца назад
38

Похоже, это займет больше, чем O (n2). Ниже приведен код программы с динамическим программированием.. не java, но будет полезен как алгоритм
http://www.geeksforgeeks.org/longest-palindromic-substring-set-2/

ответил(а) 2020-03-25T14:20:28+03:00 2 месяца назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема