una reves reversa recursividad para palabras orden invertir invertida inverso imprimir caracteres cadena arreglo algoritmo java string char substring reverse

reves - invertir una cadena en java recursividad



JAVA-Cadena inversa sin cadena temporal, matriz, constructor de cadenas, subcadena (4)

Tengo una pregunta para ti. Entonces, tengo que invertir una cadena con este requisito:

  1. Solo uso: 1 cadena variable (para entrada), 1 variable char y 1 variable int
  2. No se puede usar otra cadena, generador de cadenas, lista, matriz o colecciones
  3. Resultado de salida asignado en la variable de entrada
  4. La longitud de la variable de entrada no puede aumentar
  5. No se puede usar la subcadena de la función

Y luego pruebo esto, ¿es correcto?

String str = "Hello World"; System.out.println("Before : "+str); for(int i=0;i<str.length();i++){ str = new String(str.getBytes(), 1, str.length()-1-i) + new String(str.getBytes(), 0, 1) + new String(str.getBytes(), str.length()-i, i); System.out.println(str); } System.out.println("After : "+str);

Salida:

Antes: Hello World

ello WorldH

llo WorldeH

lo WorldleH

o WorldlleH

WorldolleH

Mundo olleH

orldW olleH

rldoW olleH

ldroW olleH

dlroW olleH

dlroW olleH

Después: dlroW olleH


Puede usar la recursión en la tarea, algo como esto:

public static String reverse(String source, int from) { if (source.length()-from == 1) { return source.charAt(from)+""; } return reverse(source, from+1) + source.charAt(from); }


String es una clase inmutable en java. Cualquier método que parezca modificarlo siempre devuelve un nuevo objeto de cadena con modificación. Entonces, la respuesta es NO: no se puede revertir una cadena in situ en Java. Las cadenas de Java se implementan como envoltorios alrededor de una matriz char, que está oculta para usted (es decir, solo puede obtener copias de esta matriz por medios normales).


Solo uso: 1 cadena variable (para entrada), 1 variable char y 1 variable int

Esto implica que la solución deseada es:

  • Tome el carácter de la posición n de la cadena, almacene en la variable de caracteres.
  • Mueva la variable m a n (en cadena).
  • restaurar el carácter en caché de la variable de caracteres a la posición m .
  • repita hasta que la cuerda esté completamente procesada.

Esta es una pregunta típica para los lenguajes de programación "básicos". Sin embargo, Java no permite esto, ya que pierde la opción de establecer un carácter basado en la posición dentro de una cadena.

Si bien esto no es pan comido en otros idiomas, Java no tiene ninguna opción para establecer valores basados ​​en un índice para Strings.

public static String reverse(String str){ char c; int i = 0; for (i=0; i< str.length() / 2; i++){ c = str.charAt(i); //this would be required to match your requirements. str[i] = str.charAt(str.length() -1 -i); str[str.length() -1 -i] = c; } return str; }

pero en java, solo puedes hacer:

public static String reverse(String str){ char c; int i = 0; for (i=0; i< str.length() / 2; i++){ c = str.charAt(i); char[] temp = str.toCharArray(); temp[i] = str.charAt(str.length() -1-i); temp[str.length() -1 -i] = c; str = new String(temp); } return str; }

lo que crea matrices de caracteres adicionales y nuevos objetos String ... Incluso si puede reducir esto a una matriz de caracteres adicional declarando que está fuera del bucle for , ya no coincide con el requisito.

Creo que el chico que diseña la pregunta estaba pensando en "C" o "php", donde es posible el acceso basado en índices en cadenas.

Si un String fuera igual a un arreglo de char (que lo hace en algunos idiomas más antiguos, ese podría ser el origen de este ejercicio) se vería así:

public static char[] reverse(char[] str){ char c; int i = 0; for (i=0; i< str.length / 2; i++){ c = str[i]; str[i] = str[str.length -1-i]; str[str.length -1 -i] = c; } return str; }


Sin utilizar ninguna colección, StringBulider, StringBuffer o la matriz temporal invierten la cadena. Simple y crujiente:

public static void main(String[] args) { String test = "Hello World"; String rev = ""; Pattern p = Pattern.compile("[//w|//W]"); Matcher m = p.matcher(test); while (m.find()) { rev = m.group()+rev; } System.out.println("Reverse==" + rev); }

Salida

Reverso == dlroW olleH

Espero eso ayude :)