翻转字符串的单词

LeetCode151,翻转字符串的单词,思想:先将字符串两边的空格去除,翻转整条字符串,翻转单词。
public class reserveString {

    public static void main(String[] args) {
        String s = " aaa ccc  d! ";
        System.out.println(reverseWords(s));
    }
public static String reverseWords(String s) {
    int left = 0,right = s.length()-1;
    StringBuilder sb = trim(s,left,right);
    reverseString(sb,0,sb.length()-1);
    reverseEachWord(sb);
    return sb.toString();
}
private static void reverseEachWord(StringBuilder sb) {
    int start = 0,end = 0;
    int n = sb.length();
    while(start < n){
        while(end < n && sb.charAt(end)!=' ') ++end;
        reverseString(sb,start,end-1);
        start = end + 1;
        end++;
    }
}
private static void reverseString(StringBuilder sb, int left, int right) {
    while (left < right){
        char temp = sb.charAt(left);
        sb.setCharAt(left++,sb.charAt(right));
        sb.setCharAt(right--,temp);
    }
}

private static StringBuilder trim(String s, int left, int right) {
    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);
        else if(sb.charAt(sb.length()-1)!=' ') sb.append(c);
        left++;
    }
    return sb;
}
}

  

  

猜你喜欢

转载自www.cnblogs.com/geekxd/p/12675805.html