/** * 【题目】 * 给定一个字符类型的数组chas, 请在单词间做逆序调整。只要做到单词顺序逆序即可, * 对空格的位置没有特别要求。 * 【举例】 * 如果把chas看作字符串为 "dog loves pig", 调整成"pig Loves dog"。 * 如果把chas看作字符串为 "I'm a student.", 调整成" student. a I'm"。 * 【解答】 * 首先把chas整体逆序。在逆序之后, 遍历chas找到每一个单词, 然后把每个单词里的 * 字符逆序即可。比如"dog loves pig", 先整体逆序变为"gip sevol god", 然后每个 * 单词进行逆序处理就变成了"pig loves dog"。逆序之后找每一个单词的逻辑, 做到不出 * 错即可。 */
*代码
public class RotateString {
public char[] rotateString(char chas[]){
if (chas==null ||chas.length==0){
return null;
}
reverse(chas,0,chas.length-1);
int left = -1;
int right = -1;
for (int i=0;i<chas.length;i++){
if (chas[i]!=' '){
//是不是起始元素 或者当前元素的前一个元素是空
left = (i == 0||chas[i-1]==' ')?i:left;
//是不是结束元素 或者当前元素的后一个元素为空
right = (i == chas.length-1||chas[i+1]==' ')?i:right;
}
if (left != -1 && right != -1){
reverse(chas,left,right);
left=-1;
right=-1;
}
}
return chas;
}
public void reverse(char chas[],int start,int end){
char tmp = 0;
while (start < end){
tmp = chas[start];
chas[start]=chas[end];
chas[end]=tmp;
start++;
end--;
}
}
public static void main(String[] args) {
char chas[]={'p','i','g',' ',' ','l','o','v','e'};
RotateString rs = new RotateString();
rs.showCharArray(chas);
rs.rotateString(chas);
rs.showCharArray(chas);
}
public void showCharArray(char chas[]){
for (char cha :chas){
System.out.print(cha+" ");
}
System.out.println();
}
}
*运行结果