zoukankan      html  css  js  c++  java
  • leecode第一百五十一题( 翻转字符串里的单词)

    class Solution {
    public:
        string reverseWords(string s) {
            string res;
            stack<char> temp;//使用辅助栈做
            int len=s.size();
            if(len==0)
                return res;
            
            int index=len-1;
            while(index>=0&&s[index]==' ')
                    index--;
            while(index>=0)
            {
                while(index>=0&&s[index]!=' ')
                {
                    temp.push(s[index]);
                    index--;
                }
                    
                while(!temp.empty())
                {
                    res.push_back(temp.top());
                    temp.pop();
                }
                
                res.push_back(' ');
                
                while(index>=0&&s[index]==' ')
                    index--;
            }
            res.pop_back();
            return res;
        }
    };
    class Solution {
    public:
        string reverseWords(string s) {
            int len=s.size();
            if(len==0)
                return s;
            
            int index_sta=0;
            int index_end=len-1;
            while(index_sta!=index_end&&index_sta!=index_end+1)//全部反转
            {
                char temp;
                temp=s[index_sta];
                s[index_sta]=s[index_end];
                s[index_end]=temp;
                index_sta++;
                index_end--;
            }
            
            index_sta=0;
            index_end=index_sta;
            while(index_end<len)
            {
                while(index_end<len&&s[index_end]==' ')//检测下一个单词的初始位置
                    index_end++;
                
                int index_temp_sta=index_end;//下个单词局部反转
                int index_temp_end=index_end;
                while(index_temp_end<len-1&&s[index_temp_end+1]!=' ')
                    index_temp_end++;
                
                while(index_temp_sta!=index_temp_end&&index_temp_sta!=index_temp_end+1)
                {
                    char temp;
                    temp=s[index_temp_sta];
                    s[index_temp_sta]=s[index_temp_end];
                    s[index_temp_end]=temp;
                    index_temp_sta++;
                    index_temp_end--;
                }
                
                while(index_end<len&&s[index_end]!=' ')//单词往前挪
                {
                    s[index_sta]=s[index_end];
                    if(index_sta!=index_end)
                        s[index_end]=' ';
                    index_sta++;
                    index_end++;
                }
                
                s[index_sta]=' ';
                index_sta++;
            }
            
            index_sta--;
            while(index_sta>0&&s[index_sta-1]==' ')
                index_sta--;
            return s.substr(0,index_sta);
        }
    };

    分析:

    第一个空间复杂度为线性阶,第二个则是常数阶,话说第二个还快点。。。所以第一个很尴尬。。。

    第一个是栈实现,第二个是反转。

  • 相关阅读:
    查询类里面对象个数
    动手动脑2
    关于随机数的产生-动手动脑1
    单词频率代码测试
    反码补码报告
    动手动脑课上总结
    java开学第一周测试代码
    【P1825】表达式整除
    工程代码の初體驗
    差分:IncDec Sequence 差分数组
  • 原文地址:https://www.cnblogs.com/CJT-blog/p/10816070.html
Copyright © 2011-2022 走看看