557. Reverse Words in a String III
2017-12-15 16:53
363 查看
问题描述:将一句话中每个字的字符串倒序排列。
思路:正向遍历,声明一个StringBuffer,遇上空格就append。遇上非空格时,如果是空格后第一个字符继续append,如果不是那么就insert到当前位置。
最佳答案:
差距分析:
出现运行时间极大差距的地方是每个字的重新排序。原思路中是通过StringBuffer实现的,append每次都会先检查下最大长度有没有超,如果超了就扩容。然而这些检查其实是完全没有必要的,而insert方法不仅检查了长度,使用的是System.arraycopy复制了一遍。最佳答案则是直接进行转换得到新的数组。效率自然快得多。
思路:正向遍历,声明一个StringBuffer,遇上空格就append。遇上非空格时,如果是空格后第一个字符继续append,如果不是那么就insert到当前位置。
public String reverseWords(String s) { char[] charArray=s.toCharArray(); StringBuffer sb=new StringBuffer(); int insertInex=0; boolean word=false; for(int i=0;i<charArray.length;i++){ char c=charArray[i]; if(Character.isWhitespace(c)){ word=true; insertInex=i; sb.append(charArray[i]); }else{ if(word){ insertInex=insertInex+1; sb.append(charArray[i]); word=false; } else sb.insert(insertInex, c); } } return sb.toString(); }
最佳答案:
public String reverseWords(String s) { if (s == null || s.length() == 0) { return ""; } char[] chars = s.toCharArray(); int i = 0; while (i < chars.length) { int index = s.indexOf(' ', i); if (index == -1) { reverse(chars, i, chars.length - 1); break; } reverse(chars, i, index - 1); i = index + 1; } return new String(chars); } private void reverse(char[] chars, int start, int end) { while (start < end) { char temp = chars[start]; chars[start] = chars[end]; chars[end] = temp; start++; end--; } }
差距分析:
出现运行时间极大差距的地方是每个字的重新排序。原思路中是通过StringBuffer实现的,append每次都会先检查下最大长度有没有超,如果超了就扩容。然而这些检查其实是完全没有必要的,而insert方法不仅检查了长度,使用的是System.arraycopy复制了一遍。最佳答案则是直接进行转换得到新的数组。效率自然快得多。
相关文章推荐
- 557. Reverse Words in a String III
- 557. Reverse Words in a String III
- 557. Reverse Words in a String III
- 557. Reverse Words in a String III
- 557. Reverse Words in a String III
- 557. Reverse Words in a String III
- 557. Reverse Words in a String III
- 557. Reverse Words in a String III
- 557. Reverse Words in a String III
- Leetcode——557. Reverse Words in a String III
- 557. Reverse Words in a String III
- 557. Reverse Words in a String III
- Leetcode557. Reverse Words in a String III
- LeetCode——557. Reverse Words in a String III
- 557. Reverse Words in a String III
- String:557. Reverse Words in a String III
- 557. Reverse Words in a String III
- 557. Reverse Words in a String III
- 557. Reverse Words in a String III
- 557. Reverse Words in a String III