翻转字符串里的单词
Posted yihangzhou
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了翻转字符串里的单词相关的知识,希望对你有一定的参考价值。
给定一个字符串,逐个翻转字符串中的每个单词。
示例:
输入: "the sky is blue
", 输出: "blue is sky the
".
说明:
- 无空格字符构成一个单词。
- 输入字符串可以在前面或者后面包含多余的空格,但是反转后的字符不能包括。
- 如果两个单词间有多余的空格,将反转后单词间的空格减少到只含一个。
进阶: 请选用C语言的用户尝试使用 O(1) 空间复杂度的原地解法。
第一种方法:时间复杂度高,但空间复杂度低
public class Solution { public String reverseWords(String s) { if(s.length()==0)return ""; String[] string=s.split("\s+"); StringBuffer sb=new StringBuffer(); for(int i=string.length-1;i>=0;i--){ sb.append(string[i]).append(" "); } return sb.toString().trim(); } }
第二种方法:时间复杂度低,但空间复杂度为O(n)
public class Solution { public String reverseWords(String s) { if(s.length()==0)return s; char[] ch=s.toCharArray(); char[] res=new char[ch.length]; int len=helper(ch,ch.length-1,res,0,0); return new String(res,0,len); } private int helper(char[] ch,int r,char[] res,int l,int len){ while(r>=0&&ch[r]==‘ ‘){ r--; } if(r<0)return Math.max(0,len-1); int rigth=r; while(r>=0&&ch[r]!=‘ ‘){ r--; } len+=rigth-r+1; for(int left=r+1;left<=rigth;left++,l++){ res[l]=ch[left]; } if(l<res.length){ res[l++]=‘ ‘; } return helper(ch,r,res,l,len); } }
以上是关于翻转字符串里的单词的主要内容,如果未能解决你的问题,请参考以下文章
LeetCode第151题—翻转字符串里的单词—Python实现