LeetCode 151. Reverse Words in a String(反转单词)

来源:互联网 发布:人工智能的产品有哪些 编辑:程序博客网 时间:2024/05/16 10:24

原题网址:https://leetcode.com/problems/reverse-words-in-a-string/

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

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

Update (2015-02-12):
For C programmers: Try to solve it in-place in O(1) space.

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 (null == s) return null;        StringBuilder sb = new StringBuilder();        int pos = s.length()-1;        for(int i=s.length()-1; i>=0; i--) {            if (s.charAt(i) == ' ') {                if (i < pos) {                    if (sb.length() > 0) sb.append(" ");                    sb.append(s.substring(i+1, pos+1));                }                pos = i-1;            }        }        if (0 <= pos) {            if (sb.length() > 0) sb.append(" ");            sb.append(s.substring(0, pos+1));        }        return sb.toString();    }}

方法二:先全部左右反转,然后逐个单词再反转一次,注意好多坑。

public class Solution {    public String reverseWords(String s) {        char[] sa = s.toCharArray();        int size = 0;        for(int i=0; i<sa.length; i++) {            if (sa[i] != ' ' || (size>0 && sa[i] == ' ' && sa[size-1] != ' ')) sa[size++] = sa[i];        }        if (size > 0 && sa[size-1] == ' ') size --;        char[] ra = new char[size];        System.arraycopy(sa, 0, ra, 0, size);        for(int i=0, j=ra.length-1; i<j; i++, j--) {            char t = ra[i];            ra[i] = ra[j];            ra[j] = t;        }        int from = 0;        for(int i=0; i<=ra.length; i++) {            if (i==ra.length || ra[i] == ' ') {                for(int l=from, r=i-1; l<r; l++, r--) {                    char t = ra[l];                    ra[l] = ra[r];                    ra[r] = t;                }                from = i+1;            }        }        return new String(ra);    }}


0 0
原创粉丝点击