版权声明:中华人民共和国持有版权 https://blog.csdn.net/Fly_Fly_Zhang/article/details/85262543
题目:
给定一个字符串,逐个翻转字符串中的每个单词。
示例:
输入: “the sky is blue”,
输出: “blue is sky the”.
说明:
无空格字符构成一个单词。
输入字符串可以在前面或者后面包含多余的空格,但是反转后的字符不能包括。
如果两个单词间有多余的空格,将反转后单词间的空格减少到只含一个。
思路:先用String的库函数,trim 将字符串头部和尾部的空格去除。采用双指针,j走到下一个空格的地方 将i - j-1进行反转。如果两个单词之间有多个空格时,i++;j++ 直到i和j都不为空,重复操作; 当跳出循环后,做最后一个单词的反转。
public class Solution {
public char[] reverse(char[] ch,int start,int end){
while(start<end){
char ch1=ch[start];
ch[start]=ch[end];
ch[end]=ch1;
start++;
end--;
}
return ch;
}
public String reverseWords(String s) {
if(s==null){
return s;
}
s=s.trim();
if(s==""){
return s;
}
char [] ch=s.toCharArray();
ch=reverse(ch,0,ch.length-1); //全部反转
int i=0;
int j=0;
StringBuffer sb=new StringBuffer();
while(j<ch.length){
if(ch[j]!=' '){
j++;
}else{
if(ch[i]!=' '){
sb.append(reverse(ch,i,j-1),i,j+1-i);
i=j+1;
j++;
}else{
i++;
j++;
}
}
}
sb.append(reverse(ch,i,j-1),i,j-i);
return sb.toString();
}
}