• 151. Reverse Words in a String


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

    Example 1:

    Input: "the sky is blue"
    Output: "blue is sky the"
    

    Example 2:

    Input: "  hello world!  "
    Output: "world! hello"
    Explanation: Your reversed string should not contain leading or trailing spaces.
    

    Example 3:

    Input: "a good   example"
    Output: "example good a"
    Explanation: You need to reduce multiple spaces between two words to a single space in the reversed string.
    

    Note:

    • A word is defined as a sequence of non-space characters.
    • Input string may contain leading or trailing spaces. However, your reversed string should not contain leading or trailing spaces.
    • You need to reduce multiple spaces between two words to a single space in the reversed string.

    Follow up:

    For C programmers, try to solve it in-place in O(1) extra space.

    two pointers

    time: O(n), space: O(1)

    class Solution {
        public String reverseWords(String s) {
            if(s == null || s.length() == 0) {
                return "";
            }
            char[] str = reverse(s.toCharArray(), 0, s.length() - 1);
            int start = 0, end = 0;
            for(int i = 0; i < str.length; i++) {
                if(str[i] != ' ') {
                    str[end++] = str[i];
                } else if(i > 0 && str[i] == ' ' && str[i - 1] != ' ') {
                    reverse(str, start, end - 1);
                    str[end++] = ' ';
                    start = end;
                }
            }
            reverse(str, start, end - 1);   // last word
            
            return end > 0 && str[end - 1] == ' ' ? new String(str, 0, end - 1) : new String(str, 0, end);
        }
        
        private char[] reverse(char[] c, int i, int j) {
            while(i < j) {
                char tmp = c[i];
                c[i] = c[j];
                c[j] = tmp;
                i++;
                j--;
            }
            return c;
        }
    }
  • 相关阅读:
    梦断代码读后感02
    UML大战需求与分析--阅读笔记4
    UML大战需求分析--阅读笔记3
    软件需求与分析课堂讨论一
    UML大战需求分析--阅读笔记02
    UML大战需求分析--阅读笔记01
    学习进度--大三下
    问题账户需求分析
    2016年秋季阅读计划
    个人总结
  • 原文地址:https://www.cnblogs.com/fatttcat/p/11340255.html
Copyright © 2020-2023  润新知