LeetCode链接:557. 反转字符串中的单词 III - 力扣(LeetCode)
思路一:将字符串存入char数组中,定义指针left,start,end指向0索引,指针right指向length-1的索引,当left <= right时,如果str[left]等于空字符则将left - 1赋值给end,若left等于right时,则将right赋值给end,遍历[start,end]进行交换,最后将left+1赋值给start,循环结束left++
java代码:
class Solution {
public String reverseWords(String s) {
char[] str = s.toCharArray();
int left = 0;
int right = str.length - 1;
int start = 0;
int end = 0;
while(left <= right){
if(str[left] == ' ' || left == right){
if(left == right){
end = right;
}else{
end = left - 1;
}
while(start < end){
char temp = str[start];
str[start] = str[end];
str[end] = temp;
start++;
end--;
}
start = left + 1;
}
left++;
}
return String.valueOf(str);
}
}
思路二:创建一个新的空间StringBuilder,将原字符串按空字符切割进数组,遍历每个索引,每个索引取出的字符串进行从后向前遍历,并存入StringBuilder,每个索引遍历完毕后判断是否为最后一个索引,若不是则添加空字符串
java代码:
class Solution {
public String reverseWords(String s) {
String[] strs= s.split(" ");
StringBuilder sb = new StringBuilder();
for(int i = 0; i < strs.length; i++){
String str = strs[i];
for(int j = str.length() - 1; j >= 0; j--){
sb.append(str.charAt(j));
}
if(i != strs.length - 1){
sb.append(' ');
}
}
return sb.toString();
}
}