zoukankan      html  css  js  c++  java
  • 42翻转单词顺序列+注意该题找单词的方法

    题目描述

    牛客最近来了一个新员工Fish,每天早晨总是会拿着一本英文杂志,写些句子在本子上。同事Cat对Fish写的内容颇感兴趣,有一天他向Fish借来翻看,但却读不懂它的意思。例如,“student. a am I”。后来才意识到,这家伙原来把句子单词的顺序翻转了,正确的句子应该是“I am a student.”。Cat对一一的翻转这些单词顺序可不在行,你能帮助他么?
     
     
    思路:两步反转法,先整体反转,然后每个单词进行反转。
    找单词的方法是找相应的空格。
    如果start的位置是空格就++,如果end的地方是空格就--或者是末尾结束符,就进行反转,一定要记得自己定义一个反转函数。
    其他在单词中间的情况就++end。找空格。
    class Solution {
    public:
        void helper(string &str,int start,int end){
            for(start,end;start < end;++start,--end){
                swap(str[start],str[end]);
            }
        }
        string ReverseSentence(string str) {
            if(str.size() == 0){
                return "";
            }
            
            helper(str,0,str.size() - 1);
            int start = 0,end = 0;
            while(str[start] != ''){
                if(str[start] == ' '){
                    ++start;
                }
                else if(str[end] == ' ' || str[end] == ''){
                    helper(str,start,end - 1);
                    start = end;
                    ++end;
                }
                else{
                    ++end;
                }
            }
            return str;
        }
    };

    这道题目还有进一步的变式题,就是两个单词之间有很多空格,最后只输出一个空格,这题的话,可以使用istringstream in(string),然后自己依据空格分割每一个单词,存储到一个数组里面,再从最后一个单词开始开始拼接,就得到了结果。

    class Solution {
    public:
        /**
         * @param s : A string
         * @return : A string
         */
        
      string reverseWords(string s) {
        // write your code here
        if (s.size() < 2) {
            return s;
        }
        istringstream ss(s);
        string tmp, result;
        vector<string> no_space;
        while (ss >> tmp) {
            no_space.push_back(tmp);
        }
        if(no_space.size() == 0){
            return " ";
        }
        int i;
        for (i = no_space.size() - 1; i > 0; --i) {
            result.append(no_space[i]);
            result.append(" ");
        }
        result.append(no_space[i]);
        return result;
    }
    };
     
  • 相关阅读:
    HDU 4492 Mystery (水题)
    UVA 10480 Sabotage (最大流)
    POJ 2446 Chessboard (二分匹配)
    VS2008下用MFC 的MSComm控件编写串口程序
    退役了~~~
    STL Algorithms 之 unique
    cocos2d中CCCallFuncND传参数的注意事项
    好太太晾衣架市场价格表(仅供参考)
    Linux VNC黑屏(转)
    C++ TinyXml操作(含源码下载)
  • 原文地址:https://www.cnblogs.com/dingxiaoqiang/p/8207244.html
Copyright © 2011-2022 走看看