• 【剑指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;
        }
    };
  • 相关阅读:
    文件的权限
    正则表达式
    软硬链接的学习
    linux系统中的文件类型和扩展名
    把数组排成最小的数
    整数中1出现的次数(从1到n整数中1出现的次数)
    最小的K个数
    连续子数组的最大和
    数组中出现次数超过一半的数字
    字符串的排列
  • 原文地址:https://www.cnblogs.com/Stephen-Jixing/p/13137534.html
Copyright © 2020-2023  润新知