本文共 1900 字,大约阅读时间需要 6 分钟。
给定一个字符串s,要求反转字符串中每个单词(即最后一个单词出现在第一位,...)。另外:反转后的单词最前面和最后面不能有空格,两个单词之间也不能有多余1个的空格。例子:
简单的字符串处理。
class Solution { public String reverseWords(String s) { s = s.trim(); // 去除s左右两端的空白字符 char[] cs = s.toCharArray(); StringBuilder sb = new StringBuilder(), res = new StringBuilder(); for (int i = cs.length - 1; i >= 0; i--) { char c = cs[i]; if (c == ' ') { // 如果c是空格 if (sb.length() > 0) { res.append(sb.reverse().toString()); sb = new StringBuilder(); } if (res.charAt(res.length() - 1) != ' ') { // 如果res的最后一位不是空格 则加入当前的空格 res.append(c); } } else { sb.append(c); } } if (sb.length() > 0) res.append(sb.reverse().toString()); return res.toString(); }}
效率并不是太高,需要看看最佳代码的思路。
class Solution { public String reverseWords(String s) { StringBuilder sb = new StringBuilder(); int i = s.length() - 1; while(i >= 0){ // 保证在i位置的字符肯定不是空格 if(s.charAt(i) == ' '){ i--; continue; } int start = s.lastIndexOf(' ', i); // 获得以i为末尾的最后一个空格所在位置 sb.append(' '); // 如果最终sb.length() > 0 则sb的第一个字符为空格 所以需要最后删除sb的第一个字符 sb.append(s.substring(start + 1, i + 1)); i = start - 1; } if(sb.length() > 0){ sb.deleteCharAt(0); } return sb.toString(); }}
转载地址:http://mxesi.baihongyu.com/