字符串单词翻转总结几种常见方法
2017-10-07 15:00
579 查看
leetcode地址:https://leetcode.com/problems/reverse-words-in-a-string
Given an input string, reverse the string word by word.
eg.
Given s = "the sky is blue",
return "blue is sky the".
1.直接使用split()方法:
该方法无法处理输入样例:“”,因为输出会是“ ”(带有空格)。
2.不实用split()方法:
参考:点击打开链接
3.对split()方法进行改进:
参考:点击打开链接
注:2,3两种方法在leetcode上均能通过。
Given an input string, reverse the string word by word.
eg.
Given s = "the sky is blue",
return "blue is sky the".
1.直接使用split()方法:
private void reverseSentence(String sentence) { if(sentence==null) return; String[] str = sentence.split("\\s+"); //String[] str = sentence.split(" "); for (int i = 0; i < str.length; i++) { System.out.print(str[i]+" "); } System.out.println(); StringBuffer sb = new StringBuffer(); for (int i = str.length-1; i >=0; i--) { sb.append(str[i]+" "); } System.out.println(sb); }
该方法无法处理输入样例:“”,因为输出会是“ ”(带有空格)。
2.不实用split()方法:
ArrayList<String> word = new ArrayList<String>(); public String reverseWords(String s) { int wordNum = calWordNum(s); StringBuffer sb = new StringBuffer(); for(int i = 0;i<wordNum;i++){ sb.append(word.get(wordNum-i-1)); if(i!=wordNum - 1){ sb.append(" "); } } return sb.toString(); } private int calWordNum(String s){ int cursor = 0; int wordNum = 0; StringBuffer sb = new StringBuffer(); for(int i = 0;i < s.length();i++) { if(i==0){//判断起始位置是否为空格 if(s.charAt(i)==' '){ continue; }else if(s.length()!= 1){ sb.append(s.charAt(i)); cursor++; }else if(s.length()==1){ sb.append(s.charAt(i)); word.add(sb.toString()); wordNum++; } }else if(i==s.length() - 1){//判断结束位置是否为空格 if(s.charAt(i)==' '){ if(cursor != 0){ wordNum++; word.add(sb.toString()); } }else{ if(cursor==0){ wordNum++; sb.append(s.charAt(i)); word.add(sb.toString()); }else{ sb.append(s.charAt(i)); word.add(sb.toString()); wordNum++; } } }else{ if(s.charAt(i)==' '){ if(cursor==0){ continue; }else if(cursor!=0){ cursor = 0; wordNum++; word.add(sb.toString()); sb.delete(0,sb.length()); } }else{ sb.append(s.charAt(i)); cursor++; } } } return wordNum; }
参考:点击打开链接
3.对split()方法进行改进:
public String reverseWords(String input) { final StringBuilder stringBuilder = new StringBuilder(); for (final String part : input.split("\\s+")) { if (!part.isEmpty()) { if (stringBuilder.length() > 0) { stringBuilder.insert(0, " "); } stringBuilder.insert(0, part); } } return stringBuilder.toString(); }
参考:点击打开链接
注:2,3两种方法在leetcode上均能通过。
相关文章推荐
- 常见的几种python字符串方法总结
- 常见的几种python字符串方法总结
- 几种常见的载入中、loading页面效果的实现方法总结
- 机器学习中几种常见优化方法总结
- 几种常见的字符串长度截取显示方法
- 机器学习中几种常见优化方法总结
- Qt常见设置背景图片的几种方法总结
- java基础之字符串常见方法总结
- 总结几种常见的Word转换PDF方法
- c语言常见的几种排序方法总结
- 几种常见的载入中、loading页面效果的实现方法总结
- 总结几种常见的Word转换PDF方法
- 总结:几种常见的内部排序方法
- 几种常见的字符串连接方法连接速度分析
- 总结几种常见的Word转换PDF方法
- java笔试中字符串翻转的几种方法(java---华为----字符逆序)
- JAVA用标准库自己写一个字符串翻转方法,翻转字符串中字母非单词
- Android中ListView的几种常见的优化方法总结
- IOS中常见字符串的几种方法
- 总结C#删除字符串数组中空字符串的几种方法