Red de conocimiento informático - Aprendizaje de programación - Preguntas de práctica de JAVA, escriba un programa para generar todas las cadenas de palíndromos en una cadena, respóndalas ~

Preguntas de práctica de JAVA, escriba un programa para generar todas las cadenas de palíndromos en una cadena, respóndalas ~

Ideas básicas: 1. Recursividad. Pellizca el principio y el final de la cuerda y luego pasa al siguiente nivel de juicio. Habrá duplicación y la complejidad computacional aumentará exponencialmente. 2. Bucle sencillo. Obtenga juicios uno por uno de las cadenas de 2-gt [longitud de la cadena].

Aquí se utiliza el segundo método~~

#include lt; iostreamgt;

#include cstdiogt; lt;cstringgt;

void outputString(char*, int);

char* partString(char*, int, int);

char* revString( char*, int);

bool isReversible(char*, int);

bool strEqual(char*, char*, int);

int main () {

usando el espacio de nombres std;

char* str;

cout lt;lt; "Confirma la longitud de la cadena: ";

int len ​​= 0;

cin gt; gt;

if(len lt; = 0) devuelve 0; cout lt; endl lt; "La cadena por favor =O= :: ";

str = new char[len 1]; /p>

cin.getline(str, len);

cout lt; endl lt; "La cadena: " lt; cout lt; endl lt; "Ahora generando..." lt; endl lt; lt; endl lt; lt; "Listo, presione cualquier tecla para salir..." lt; endl; >

void cadena de salida(char* str, int len) {

for(int i = 2; i lt; len - 1; i) {

for(int j = 0; j lt; len - i; j ) {

char* str2 = partString(str, j, i);

if(isReversible(str2, i))

std::cout lt; str2 lt; std:: endl

eliminar[]

}

}

}

char* partString(char* str, int index, int len) {

char* str

2 = nuevo char[len 1];

for(int i = index; i lt; index len; i)

str2[i - index] = str[i];

str2[len] = '\0';

return str2

}

bool isReversible(char* str, int len) { //Confirma si una cadena es una cadena palíndromo.

char *str1, *str2;

if(len 2 == 0) {

str1 = partString(str, 0, len/2);

str2 = revString(partString(str, len/2, len/2), len/2

} else {

str1 = partString( str, 0, len/2);

str2 = revString(partString(str, len/2 1, len/2), len/2);

}

bool b = strEqual(str1, str2, len/2);

eliminar[] str1, str2

return b;

char* revString(char* str, int len) { //Devuelve una cadena invertida.

char* str2 = new char[len 1];

for(int i = 0; i lt; len; i) {

str2[len - i - 1] = cadena[i];

}

cadena2[len] = '\0';

}

bool strEqual(char* str1, char* str2, int len) { //Confirma si las dos cadenas son iguales.

for(int i = 0; i lt; len; i)

if(str1[i] != str2[i]) devuelve falso;

return true;

}

Significa que no debería ser difícil reescribirlo en Java. Lo escribimos con mucho cuidado, lo probamos y compilamos para que podamos adoptarlo ~. QwQ