2016腾讯实习生在线笔试题:把字符串中单词反转,China from am I.转换成:I am from China.
思路:两次逆序操作即可:第一次对字符串整体逆序,第二次分别对每个单词逆序。
同时对'.'特殊处理,对单词逆序时,第一个单词特殊处理
源码:
package CharString;
//问题:把字符串中单词反转,China from am I.转换成:I am from China.
//两次逆序操作即可:第一次对字符串整体逆序,第二次分别对每个单词逆序。
//同时对'.'特殊处理,对单词逆序时,第一个单词特殊处理
public class SwapWords {
public static void swap(char[] c,int i,int j){
char temp ;
//整体逆序时,最后一个'.'不逆序。
//每个单词逆序时,第一个单词前无空格,而j指向空格,所以将j--
if(i==0){
j--;
}
while(j>i){
temp = c[i];
c[i] = c[j];
c[j] = temp;
i++;
j--;
}
}
public static void swapWords(char[] c){
int len = c.length;
swap(c,0,len-1);//先整体逆序,对'.'的处理放在上述swap中
int i=0;
int j=0;
while(j<len-1){
i=j;
j++;
while(c[j]!=32&&c[j]!=46){
j++;
}
if(c[j]=='.'){//处理最后一个单词的逆序
swap(c,++i,--j);
j++;
}
else
swap(c,i,j);//单词逆序时,i,j分别指向一个单词左右的空格
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
char[] c ="China from am I.".toCharArray();
swapWords(c);
for(int i=0;i<c.length;i++){
System.out.print(c[i]);
}
}
}