Dla ciągu literek xxxabcxxxcbaxxx odpowiedzią będzie xxxABCxxxCBAxxx. Połówki palindromu mogą być dowolnie umiejscowione.
Chodzi o wyszukanie wszystkich takich palindromów :)
Kawałek mojego kodu który nie zawsze robi to, o co jest proszony
package poligon;
import java.util.Scanner;
public class Sekwencje {
private final String pierwotneSlowo;
private String poTransformacji;
private boolean[] transformacja;
private final int dlugosc;
public Sekwencje(String string) {
pierwotneSlowo = string;
poTransformacji = string;
dlugosc = string.length();
transformacja = new boolean[dlugosc];
//zamianaLiterek();
}
private void zamianaLiterek() {
poTransformacji = poTransformacji.replace('g', 'a'); //A == G
poTransformacji = poTransformacji.replace('v', 'a'); //A == V
poTransformacji = poTransformacji.replace('e', 'd'); //D == E
poTransformacji = poTransformacji.replace('y', 'f'); //F == Y
poTransformacji = poTransformacji.replace('q', 'n'); //N == Q
}
private void szukaniePalindromow(String szukane) {
if(poTransformacji.contains(reverse(szukane))) {
poTransformacji = poTransformacji.replaceAll(szukane, " "+szukane.toUpperCase()+" ");
poTransformacji = poTransformacji.replaceAll(reverse(szukane), " "+reverse(szukane).toUpperCase()+" ");
}
}
public void dzialaj() {
for(int i = (dlugosc > 15)? 15 : dlugosc; i>2; i--)
for(int j=0; j<dlugosc; j++)
if(j+i <= dlugosc) {
String szukane = poTransformacji.substring(j, j+i).toLowerCase();
if(poTransformacji.contains(reverse(szukane))) {
poTransformacji = poTransformacji.replace(szukane, " "+szukane.toUpperCase()+" ");
poTransformacji = poTransformacji.replace(reverse(szukane), " "+reverse(szukane).toUpperCase()+" ");
}
}
}
private String reverse(String string) {
int length = string.length();
StringBuilder zwracana = new StringBuilder(length);
for(int i = length-1; i >= 0; i--)
zwracana.append(string.charAt(i));
return zwracana.toString();
}
@Override
public String toString() {
return poTransformacji;
}
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
Sekwencje sekwencje = new Sekwencje(scanner.nextLine()); //hkuhiewhsufgyuabjgvthgsfuygursfgsgtvgjbabgugfukygf
sekwencje.dzialaj();
System.out.println(sekwencje);
}
}