2.实现一个方法,输入字符串以单词为单位进行反转,例如I like you 反转为you like I,不可使用String等
char[] reverse(char[] input)
package com.leetcode;
/**
* 转换字符串中单词的顺序
* 输入:"the sky is blue"
输出:"blue is sky the"
必须用原始的char[]
*/
public class ReverseCharArray {
public char[] reverseWords(char[] input){
//去掉首尾和中间空后新的数组有最后的空
char[] arr = trimSpaces(input);
System.out.println(arr);
//去掉最后的空格
char[] middlearr = trimSpaces(arr);
System.out.println(middlearr);
//反转全部字符串
revers(middlearr,0,middlearr.length-1);
System.out.println(middlearr);
reversEachWord(middlearr);
return middlearr;
}
private char[] trimSpaces(char[] input) {
int start = 0;
int end = input.length-1;
while(start<end&&input[start]==' '){
start++;
}
while(start<end&&input[end]==' '){
end--;
}
char[] newChar = new char[end-start+1];
int i=0;
while(start<=end){
if(input[start]!=' '){
newChar[i]=input[start];
i++;
}else if(input[start]==' '&&newChar[i-1]!=' '){
newChar[i]=input[start];
i++;
}
start++;
}
while(i<newChar.length){
newChar[i]=' ';
i++;
}
return newChar;
}
/**
* 反转字符串
* @param arr
* @param start
* @param end
*/
public void revers(char[] arr,int start,int end){
while(start<end){
char tmp = arr[start];
arr[start] = arr[end];
arr[end]=tmp;
start++;
end--;
}
}
public static void main(String[] args) {
char[] arr = "I love book ".toCharArray();
ReverseCharArray rc =new ReverseCharArray();
char[] a1=rc.reverseWords(arr);
}
/** 反转每个单词 */
private void reversEachWord(char[] finalArr) {
int start = 0;
int end = 0;
while(end<finalArr.length){
if(finalArr[end]==' ') {
revers(finalArr, start, end-1);
start = end + 1;
}
end++;
}
System.out.println(finalArr);
}
}