• leetcode[186]Reverse Words in a String II


    Given an input string, reverse the string word by word. A word is defined as a sequence of non-space characters.

    The input string does not contain leading or trailing spaces and the words are always separated by a single space.

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

    Could you do it in-place without allocating extra space?

    class Solution {
    public:
    //无需额外空间开销
    //反转整个字符串, 再反转每个单词
    void reverseWords(string &s) {
        if(s.length()<1)return;
        int i=0,j=s.length()-1;
        //去开头结尾的空格
            while(s[i]==' '&&i<s.length())
            {
                i++;
                if(i==s.length())
                {
                    s="";
                    return;
                }
            }
            while(s[j]==' '&&j>=0)
            {
                j--;
                if(j<0)
                {
                    s="";
                    return;
                }
            }
            if(j-i<0)return;
            //截取除去开头结尾空格后的部分,并将其反转
            s=s.substr(i,j-i+1);
            reverse(s.begin(),s.end());
            //对每个以空格隔开的单词再次反转
        i=0,j=0;
        while(j<s.length())
        {
            while(s[j]!=' '&&j<s.length())j++;
            reverse(s.begin()+i,s.begin()+j);
            int tmp=j;
            while(s[j]==' '&&j<s.length())j++;
            if(tmp+1<s.length())s.erase(s.begin()+tmp+1,s.begin()+j);
            //注意此时s的长度已经变短,下边需要减去相应差值
            int shortL=j-tmp-1;
            j-=shortL;
            i=j;
        }
        return;
    }
    /**
    需额外空间开销
    void reverseWords(string &s) {
        if(s.empty())return;
        string tmp="";
        string str="";
        int i=0;
        while(i<s.length())
        {
            while(s[i]==' '&&i<s.length())i++;
            if(s[i]!=' '&&i<s.length())
            {
                while(s[i]!=' '&&i<s.length())tmp=s[i++]+tmp;
                str+=(tmp+' ');
                tmp="";
            }
        }
        reverse(str.begin(),str.end());
        int n=str[0]==' '?1:0;
        s=str.substr(n,str.size());
        return;
    }
    */
    };
  • 相关阅读:
    Mac pycharm专业版安装以及破解方法
    Django 错误之 No module named ‘MySQLdb’
    archery部署
    MySQL监控内容
    mac安装神器brew
    4. 寻找两个有序数组的中位数
    7.整数反转
    2.两数相加
    1. 两数之和
    141. 环形链表
  • 原文地址:https://www.cnblogs.com/Vae1990Silence/p/4283984.html
Copyright © 2020-2023  润新知