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; } }