Sword se refiere a offer-42- voltea el orden de las palabras VS gira la cadena a la izquierda-java

Preguntas y pruebas

package sword042;
/*题目一:输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。
 * 为简单起见,标点符号和普通字母一样处理。
 * 例如输入字符串为“I am a Student.",则输出为”Student. a am i".

题目二:字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部。
请定义一个函数实现字符串左旋转的功能。
比如输入字符串”abcdefg"和数字2,该函数将返回左旋转2位得到的结果“cdefgab"


*/


public class main {
	
	public static void main(String[] args) {
		String [] testTable = {"hello","A man, a plan, a canal: Panama","I am a Student."};
		for (String ito : testTable) {
			test(ito);
		}
		String [] testTable2 = {"hello","A man, a plan, a canal: Panama","I am a Student."};
		for (String ito : testTable2) {
			test2(ito);
		}
	}
		 
	private static void test(String ito) {
		Solution solution = new Solution();
		String rtn;
		long begin = System.currentTimeMillis();
		System.out.print(ito);		    
		System.out.println();
		//开始时打印数组
		
		rtn= solution.reverseString(ito);//执行程序
		long end = System.currentTimeMillis();	
		
		System.out.println("rtn=" );
		System.out.print(rtn);
		System.out.println();
		System.out.println("耗时:" + (end - begin) + "ms");
		System.out.println("-------------------");
	}
	
	private static void test2(String ito) {
		Solution solution = new Solution();
		String rtn;
		long begin = System.currentTimeMillis();
		System.out.print(ito);		    
		System.out.println();
		//开始时打印数组
		
		rtn= solution.leftRotateString(ito,2);//执行程序
		long end = System.currentTimeMillis();	
		
		System.out.println("rtn=" );
		System.out.print(rtn);
		System.out.println();
		System.out.println("耗时:" + (end - begin) + "ms");
		System.out.println("-------------------");
	}

}

Tema 1: Ingrese una oración en inglés e invierta el orden de las palabras en la oración, pero el orden de los caracteres en la palabra permanece sin cambios. Para simplificar, los signos de puntuación se tratan como letras ordinarias. Por ejemplo, si la cadena de entrada es "Soy un estudiante", la salida es "Estudiante. A soy yo".
Método 1: separe la cadena por espacios y conviértala en una matriz de cadenas, cree un StringBuilder y agregue desde la última cadena a la primera cadena
Método 2: El primer paso es invertir todos los caracteres de la oración. Por ejemplo, voltea todos los caracteres en "Soy un estudiante" para obtener ".tneduts a ma i". En este momento, no solo se invierte el orden de las palabras en la oración, sino que también se cambia el orden de los caracteres en las palabras. invertido. El segundo paso es invertir el orden de los caracteres en cada palabra y se obtiene "estudiante. Soy yo". Esta es la salida que cumple con los requisitos del título.

Tema 2: La operación de rotación a la izquierda de una cadena es transferir varios caracteres delante de la cadena al final de la cadena. Defina una función para realizar la rotación izquierda de la cadena. Por ejemplo, si ingresa la cadena "abcdefg" y el número 2, la función devolverá el resultado "cdefgab", que se rota 2 dígitos hacia la izquierda:
Método 1: No es una tarea fácil encontrar la ley de cada carácter que se mueve cuando se gira la cuerda. Entonces, ¿podemos encontrar inspiración en la idea de resolver el primer problema? En la primera pregunta, si solo hay dos palabras en la cadena de entrada, como "hola mundo", cambia el orden de las palabras en esta oración para obtener "hola mundo". Compara estas dos cadenas, ¿no es posible? pensar en "hola mundo" como la transferencia de los primeros caracteres de la cadena original "hola mundo" al final? En otras palabras, estos dos problemas son muy similares y también podemos resolver el segundo problema invirtiendo la cadena.
Tomando "abcdeftg" como ejemplo, podemos dividirlo en dos partes. Como queremos poner los dos primeros caracteres detrás, dividimos los dos primeros caracteres en la primera parte y todos los caracteres siguientes en la primera parte. Dos partes . Primero invertimos las dos partes, entonces obtenemos "bagfedc", y luego invertimos toda la cadena, y obtenemos "cdefgab", que resulta ser el resultado de rotar la cadena original 2 dígitos hacia la izquierda.

package sword042;


public class Solution {
	public String reverseString(String s) {
		String[] strings = s.split(" ");
		StringBuilder builder = new StringBuilder();
		for(int i=strings.length-1;i>=1;i--) {
			builder.append(strings[i]);
			builder.append(" ");
		}
		builder.append(strings[0]);
		return builder.toString();
	}
	
	public String leftRotateString(String s,int index) {
		int length = s.length();
		s = reverse(s);
		s = reverse(s.substring(0, length - index)) + reverse(s.substring(length - index, length));		
		return s;
	}
	
	private String reverse(String s) {
		char[] array = s.toCharArray();
		int i = 0;
		int j = array.length -1;
		while(i<=j) {
			char temp = array[i];
			array[i] = array[j];
			array[j] = temp;
			i++;
			j--;
		}
		return String.valueOf(array);
	}

}

Supongo que te gusta

Origin blog.csdn.net/xushiyu1996818/article/details/112214804
Recomendado
Clasificación