January 26, 2019

151. Reverse Words in a String

151. Reverse Words in a String

  • 直接对 string 做操作很难,所以把 String 转换成 Array 之后再做处理
  • 代码中注意 Java 和 Python 中怎么做 trim,replace 操作(或者自己写一个 ,method 实现),以及把 Array 转化回 String

Java:

public class Solution {
    public String reverseWords(String s) {
        s = s.trim().replaceAll(" +", " ");
        char[] sArray = s.toCharArray();
        reverse(sArray, 0, sArray.length - 1);
        int start = 0;
        for (int i = 0; i < sArray.length; i++) {
            if (sArray[i] == ' ') {
                reverse(sArray, start, i - 1);
                start = i + 1;
            }
        }
        reverse(sArray, start, s.length() - 1);
        return String.valueOf(sArray);
    }

    private void reverse(char[] sArray, int i, int j) {
        while (i < j) {
            char temp = sArray[i];
            sArray[i] = sArray[j];
            sArray[j] = temp;
            i ++;
            j --;
        }
    }
}

Python:

class Solution(object):
    def reverseWords(self, s):
        """
        :type s: str
        :rtype: str
        """
        s = s.strip()
        s = ' '.join(s.split())
        s_list = list(s)
        self.reverse(s_list, 0, len(s) - 1)
        start = 0
        for idx in range(len(s_list)):
            if s_list[idx] == ' ':
                self.reverse(s_list, start, idx - 1)
                start = idx + 1
        self.reverse(s_list, start, len(s_list) - 1)
        return ''.join(s_list)
    
    def reverse(self, s_list, i, j):
        while i < j:
            s_list[i], s_list[j] = s_list[j], s_list[i]
            i += 1
            j -= 1
comments powered by Disqus