题目:
思路:
其实该题可以通过两次反转来实现
首先将整个字符串反转,然后根据空格来判断每个单词的开始和结束的位置,再将每个单词反转
代码:
public class Solution {
public String ReverseSentence(String str) {
//将字符串抓化为字符数组
char[] chars = str.toCharArray();
//整个句子反转
reverse(chars,0,chars.length - 1);
int blank=-1;//单词的起始点
for(int i=0;i<chars.length;i++){
if(chars[i]==' '){
int nextblank=i;//单词的中止点
reverse(chars,blank+1,nextblank-1);//此部分要注意,blank要+1,nextblank要-1
blank=nextblank;
}
}
//因为最后一个单词的结束部分没有空格了,所以最后一个单词得单独进行反转
reverse(chars,blank+1,chars.length-1);
return new String(chars); //j将字符数组再次转变为字符串
}
public void reverse(char[] chars,int low,int high){
while(low<high){
//这部分其实就是在首位各有一个指针(虽然不是指针),将首位对应位置的单词进行交换,从而完成反转
char temp=chars[low];
chars[low]=chars[high];
chars[high]=temp;
low++;
high--;
}
}
}
延伸的左旋字符串可以参考我的另一个博客
链接如下:https://blog.csdn.net/windyxue/article/details/97532274