[LeetCode] 151. 翻转字符串里的单词
Posted 怕什么
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[LeetCode] 151. 翻转字符串里的单词相关的知识,希望对你有一定的参考价值。
自己做的错了,没考虑到中间可能有多个空格:
public static String reverseWords(String s){ String[] s1 = s.trim().split(" "); String s2=new String(); s2=s1[s1.length-1]+" "; for(int i=s1.length-2;i>0;i--){ s2=s2+s1[i]+" "; } s2=s2+s1[0]; // s2.trim(); return s2; }
这里如果在用split的时候用的是正则表达式就不会有问题,再利用语言对字符串提供的工具:
class Solution { public String reverseWords(String s) { // 除去开头和末尾的空白字符 s = s.trim(); // 正则匹配连续的空白字符作为分隔符分割 List<String> wordList = Arrays.asList(s.split("\\\\s+")); Collections.reverse(wordList); return String.join(" ", wordList); } }
不得不说,自带的方法真的很慢哈,虽然写起来很简单。
题解中给的方法一:用一个双指针,相当于遍历整个数组
class Solution { public String reverseWords(String s) { s = s.trim(); int j=s.length()-1,i=j; StringBuilder res=new StringBuilder(); while(i>=0){ while(i>=0&&s.charAt(i)!=\' \')i--; res.append(s.substring(i+1,j+1)+" "); while(i>=0&&s.charAt(i)==\' \')i--; j=i; } return res.toString().trim(); } }
方法二:
class Solution { public String reverseWords(String s) { String arr[]=s.split(" "); StringBuilder sb = new StringBuilder(""); for(int i=arr.length-1;i>=0;i--){ if("".equals(arr[i])){ continue; } sb.append(arr[i]).append(" "); } String res=sb.toString(); if("".equals(res)){ return res; } return res.substring(0,res.length()-1); } }
以上是关于[LeetCode] 151. 翻转字符串里的单词的主要内容,如果未能解决你的问题,请参考以下文章