[Leetcode] Reverse Words in a String

来源:互联网 发布:小学英语课文朗读软件 编辑:程序博客网 时间:2024/05/17 08:37

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.

public class Solution {    public String reverseWords(String s) {        if(s == null)            return null;        if(s.length() == 0)            return s;        char[] array = s.toCharArray();        reverse(array, 0, array.length - 1);        int index = -1;        int start = 0;        int space = -1;        while(start < array.length && array[start] == ' ')            start++;        while(start < array.length){            if(index == -1 || array[start] != ' ')                array[++index] = array[start++];            else if(array[start] == ' ' && array[index] == ' '){                start++;            }            else {// array[start] == ' ' && array[index] != ' '                 reverse(array, space + 1, index);                array[++index] = array[start++];                space = index;            }        }        reverse(array, space + 1, index);        if(index == -1)            return new String("");        else{            if(index < array.length && array[index] == ' ')                return new String(array, 0, index);            else                return new String(array, 0, index + 1);        }    }    public void reverse(char[] array, int left, int right){        while(left < right){            char temp = array[left];            array[left] = array[right];            array[right] = temp;            left++;            right--;        }    }}

Use Java String.split()
public class Solution {    public String reverseWords(String s) {        if(s == null)            return null;        if(s.length() == 0)            return s;        String[] res = s.split(" ");        StringBuilder sb = new StringBuilder("");        for(int i = res.length - 1; i >= 0; i--)            if(res[i].length() != 0){                sb.append(' ');                sb.append(res[i]);            }        if(sb.length() == 0)            return sb.toString();        return sb.substring(1, sb.length());    }}


0 0