[Java][Leetcode middle] 151. 反转字符串中的单词
思路挺简单的
自己想的,步骤挺复杂的
- 先统计处开头和结尾的空格数
- 跳过开头这些空格,将单词放到数组中
- 统计最后一个可能漏过的单词(例如:“hello word”,没有空格退出)
- 倒序输出
public String reverseWords(String s) {int n = s.length();int startCnt = 0;int endCnt = n-1;while(startCnt < n){if(s.charAt(startCnt) == ' '){startCnt++;} else {break;}}while(endCnt >= 0){if( s.charAt(endCnt) == ' '){endCnt--;} else{break;}}String[] words = new String[n];int cnt = -1;int inWord=0;int startIndex = 0;for(int i = startCnt; i <= endCnt ; i++){if(s.charAt(i) == ' '){if(inWord == 1){words[++cnt] = s.substring(startIndex, i);}inWord = 0;}else{if(inWord == 0){startIndex = i;}inWord = 1;}}// 处理最后一个未处理的单词if(inWord == 1){words[++cnt] = s.substring(startIndex, endCnt+1);}StringBuilder sb = new StringBuilder();for(int i = cnt ; i>=0 ; i--){sb.append(words[i]);if(i != 0){sb.append(" ");}}return sb.toString();}
用API
public String reverseWords2(String s) {s = s.trim();String[] split = s.split("\\s+");List<String> wList = Arrays.asList(split);Collections.reverse(wList);return String.join(" ", wList);}