Мне нужно написать метод, в котором мне задана строка s
, и мне нужно вернуть кратчайшую строку, содержащую s
, как непрерывную подстроку дважды.
Однако два вхождения s
могут перекрываться. Например,
-
aba
возвращаетababa
-
xxxxx
возвращаетxxxxxx
-
abracadabra
возвращаетabracadabracadabra
Мой код до сих пор таков:
import java.util.Scanner;
public class TwiceString {
public static String getShortest(String s) {
int index = -1, i, j = s.length() - 1;
char[] arr = s.toCharArray();
String res = s;
for (i = 0; i < j; i++, j--) {
if (arr[i] == arr[j]) {
index = i;
} else {
break;
}
}
if (index != -1) {
for (i = index + 1; i <= j; i++) {
String tmp = new String(arr, i, i);
res = res + tmp;
}
} else {
res = res + res;
}
return res;
}
public static void main(String args[]) {
Scanner inp = new Scanner(System.in);
System.out.println("Enter the string: ");
String word = inp.next();
System.out.println("The requires shortest string is " + getShortest(word));
}
}
Я знаю, что я, вероятно, ошибаюсь на алгоритмическом уровне, а не на уровне кодирования. Каким должен быть мой алгоритм?