151反转字符串中的单词
题目链接:151. 反转字符串中的单词 - 力扣(LeetCode)
class Solution {
public String reverseWords(String s) {
s=s.trim();
String[] arr=s.split("\\s+");
StringBuilder sb=new StringBuilder();
for(int i=arr.length-1;i>=0;i--){
sb.append(arr[i]);
if(i!=0){
sb.append(" ");
}
}
return sb.toString();
}
}
class Solution {
public String reverseWords(String s) {
//双指针法
//1.移除多余空格,反转字符串
StringBuilder sb=trimSpace(s);
//2.反转sb
sb.reverse();
//3.将每个单词反转
reverseEachWord(sb);
return sb.toString();
}
public StringBuilder trimSpace(String s){
int left=0,right=s.length()-1;
while(left<=right&&s.charAt(left)==' ')left++;
while(left<=right&&s.charAt(right)==' ')right--;
StringBuilder sb=new StringBuilder();
while(left<=right){
char c=s.charAt(left);
if(c!=' '){
sb.append(c);
//看看sb中是否是单词末尾,不为空则加一个空格,为空则去掉空格
}else if(sb.charAt(sb.length()-1)!=' '){
sb.append(c);
}
left++;
}
return sb;
}
public void reverseEachWord(StringBuilder sb){
int left=0,right=0;
while(right<sb.length()){
while(right<sb.length()&&sb.charAt(right)!=' ')right++;
reverse(sb,left,right-1);
left=right+1;
right=left;
}
}
public void reverse(StringBuilder sb,int left,int right){
while(left<right){
char temp=sb.charAt(left);
sb.setCharAt(left++,sb.charAt(right));
sb.setCharAt(right--,temp);
}
}
}