151 反转字符串的单词
感觉几数之和系列的题没有白刷
class Solution {
public String reverseWords(String s) {
s = removeSpace(s);
char[] chars = s.toCharArray();
reverse(chars, 0, chars.length - 1);
int lo = 0, hi = 0;
while(hi < s.length()) {
while(hi < s.length() && chars[hi] != ' ') hi++;
reverse(chars, lo, hi - 1);
while (hi < s.length() && chars[hi] == ' ') hi++;
lo = hi;
}
return new String(chars);
}
public String removeSpace(String s) {
int start = 0;
int end = s.length() - 1;
while(start < s.length() && s.charAt(start) == ' ') start++;
while(end >= 0 && s.charAt(end) == ' ') end--;
StringBuilder sb = new StringBuilder();
while (start <= end) {
if (s.charAt(start) != ' ') {
sb.append(s.charAt(start++));
continue;
}
while (start + 1 <= end && s.charAt(start + 1) == ' ') {
start++;
}
sb.append(s.charAt(start++));
}
return sb.toString();
}
public void reverse(char[] chars, int start, int end) {
while(start < end) {
char temp = chars[start];
chars[start] = chars[end];
chars[end] = temp;
start++;
end--;
}
}
}