您的位置:首页 > 其它

2016腾讯实习生在线笔试题:把单词反转

2016-06-17 16:33 337 查看
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]);
}
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: