public class Solution {
public String reverseWords(String s) {
if (s == null || s.length() == 0) return "";
StringBuilder str = new StringBuilder(s);
StringBuilder ret = new StringBuilder();
reverse(0, str.length()-1, str);
// trim leading and tailing spaces
int st = 0, ed = str.length()-1;
while (st < str.length() && str.charAt(st) == ' ') st++;
while (ed >= 0 && str.charAt(ed) == ' ') ed--;
if (st == ed+str.length()+1) return ret.toString();
str = new StringBuilder(str.substring(st, ed+1));
// trime middle spaces
st = 0; ed = 0;
while (st < str.length()) {
while (st<str.length() && str.charAt(st) == ' ') st++;
ed = st;
while (ed<str.length() && str.charAt(ed) != ' ') ed++;
reverse(st, ed-1, str);
ret.append(str.substring(st, ed));
ret.append(' ');
st = ed;
}
// remove the last blankspace
return ret.substring(0, ret.length()-1);
}
public static void reverse(int lo, int hi, StringBuilder str) {
while (lo < hi) {
char tmp = str.charAt(lo);
str.setCharAt(lo, str.charAt(hi));
str.setCharAt(hi, tmp);
lo++;
hi--;
}
}
}
Leetcode 151. Reverse Words in a String
最新推荐文章于 2024-01-04 11:20:32 发布