zoukankan      html  css  js  c++  java
  • 【剑指offer44 翻转单词顺序】

    题目描述

    牛客最近来了一个新员工Fish,每天早晨总是会拿着一本英文杂志,写些句子在本子上。同事Cat对Fish写的内容颇感兴趣,有一天他向Fish借来翻看,但却读不懂它的意思。例如,“student. a am I”。后来才意识到,这家伙原来把句子单词的顺序翻转了,正确的句子应该是“I am a student.”。Cat对一一的翻转这些单词顺序可不在行,你能帮助他么?
     
    先整体全部翻转,然后对于空格为间隔判断局部,局部翻转(这样就不用单独考虑句号的事情)
    以结尾标志为循环结束
    class Solution {
    public:
        void Reverse(string &str,int begin,int end){
            while(begin < end){
                swap(str[begin++],str[end--]);
            }
        }
        
        string ReverseSentence(string str) {
            /*//CLion能过  这里面过不了
            if(str=="")return str;
            string tmp;
            string ans;
            for(int i=0 ; i<=str.length(); ++i){
                if(str[i-1]=='.'){//句子尾  就不添加空格
                    ans += tmp ;
                    tmp = "";
                    continue ;
                }
                if(str[i] == ' ' ||  str[i] == ''){
                    tmp +=" ";
                    ans = tmp + ans ;
                    tmp = "";
                    continue ;
                }
                tmp += str[i];
            }
            return ans;*/
            
            int len = str.length();
            if(len == 0) return "";
            int begin=0;
            int end=0;
            //先整体全部翻转
            Reverse(str,0,len-1);
            begin=end=0;
            while(str[begin]!='')
                {
                if(str[begin]==' ')
                    {
                    begin++;
                    end++;
                }
                else if(str[end]==' '||str[end]=='')
                    {//begin 和 end 之间需要旋转了
                    Reverse(str,begin,--end);
                    begin = end+1;
                    end = begin ;
                }
                else end++;
            }
            return str;
        }
    };
  • 相关阅读:
    poj 3074(DLX)
    zoj 3209(DLX)
    hdu 4531(模拟+BFS+DFS)
    hdu 2065(递推+矩阵优化)
    poj 3714 (最近点对)
    zoj 3690(递推+矩阵优化)
    poj 3076(DLX)
    hdu 4533(一种很巧妙的方法|线段树+扫描线)
    hdu 4513(模拟)
    sql server 2008 评估已过期。
  • 原文地址:https://www.cnblogs.com/Stephen-Jixing/p/13137534.html
Copyright © 2011-2022 走看看