LeetCode OJ --问题与解答 Reverse Words in a String

来源:互联网 发布:2017网络新技术 编辑:程序博客网 时间:2024/05/19 13:17
题目


Given an input string, reverse the string word by word.

For example,
Given s = "the sky is blue",
return "blue is sky the".

click to show clarification.

Clarification:

  • What constitutes a word?
    A sequence of non-space characters constitutes a word.
  • Could the input string contain leading or trailing spaces?
    Yes. However, your reversed string should not contain leading or trailing spaces.
  • How about multiple spaces between two words?
    Reduce them to a single space in the reversed string.
按照单词把字符串翻转


思路


1 这道题目的关键是要把三个注意点给考虑到:

a 单词是按照空格分隔。

b 字符串前后可以有空格,返回的时候不需要有这类空格。

c 当中重复的空格可以有,返回的时候只留一个。

2 关于前后的空格,trim() 函数可以处理。

3 可以这样考虑。从尾部开始,每次碰到空格,就代表之前的是一个单词,加入到新的字符串中,并且加一个空格。这样扫描一遍,也就逆序的加好了。不要忘记最后一个单词也手动加。

4 注意stringbuffer 添加部分字符数组的3个参数的含义:数组,起始点,长度。

5 另外,如果没有条件3。就是不同数量的空格也逆序的返回的话,可以有个更有意思的方法。这里就说说思路。

a 第一遍扫描,从头到尾,把每个单词给逆序。

b 第二遍,直接把整个字符串给逆序。

c 这样也只需要一个方法了。


代码


public class Solution {    public String reverseWords(String s) {             if(s.length()==0){         return s; } s=s.trim(); char[] ch = s.toCharArray(); StringBuffer sb = new StringBuffer(); int end = ch.length-1; for(int i = ch.length-1;i>=0;i--){     if(ch[i]==' '){         sb.append(ch,i+1,end-i).append(' ');         while(i>=0 && ch[i]==' '){             i--;         }         end = i;     } } sb.append(ch,0,end+1); return new String(sb);}}


0 0
原创粉丝点击