zoukankan      html  css  js  c++  java
  • 剑指offer:翻转单词序列

    题目描述

    牛客最近来了一个新员工Fish,每天早晨总是会拿着一本英文杂志,写些句子在本子上。同事Cat对Fish写的内容颇感兴趣,有一天他向Fish借来翻看,但却读不懂它的意思。例如,“student. a am I”。后来才意识到,这家伙原来把句子单词的顺序翻转了,正确的句子应该是“I am a student.”。Cat对一一的翻转这些单词顺序可不在行,你能帮助他么?
     
    整体思路:
      先翻转整个句子,然后再对单个单词进行翻转, 单词之间通过遍历字符串判断字符是否为' ‘’来区分。
     
    代码:
    1.简单的for循环翻转
    class Solution {
    public:
        void reversesort(string& str, int low , int high){
            for(int i = low; i <= (low + high) / 2; i++){
                swap(str[i], str[high+low-i]);
            }
        }
        
        string ReverseSentence(string str) {
            int len = str.size();
            if(str[0] == ' ') return str;
            reversesort(str, 0, len - 1); //整体翻转
            for(int i = 0, r = 0; r <= len;){
                if(str[r] != ' ' && r < len){
                    r++;
                }else{
                    reversesort(str, i, r - 1);
                    i = ++r; //l = r + 1  r = r + 1;
                }
            }
            return str;
        }
    };

    2.

    字符串拼接法

    这个会慢一点,但是好理解。

    class Solution {
    public:
        string ReverseSentence(string str) {
             
            int len = str.size();
            string ans = "";
            string cur = "";
            for(int i = 0; i < len; i++){
                if(str[i] == ' ') ans = " " + cur + ans, cur = "";
                else cur += str[i];
            }
            if(cur.size()) ans = cur + ans;
            return ans;
        }
    };
  • 相关阅读:
    从左边或右边删除字符串-python 使用lstrip
    MapReduce- 学习9313第一节记录 材料源于百度百科
    138. (待解决)复制带随机指针的链表
    19. 删除链表的倒数第N个节点-链表(leetcode)
    347.前k个高频元素-counter(leetcode)
    python二进制、十进制、8进制、16进制转换(转)
    POJ 1715
    POJ 1306
    POJ 2436
    POJ 2249
  • 原文地址:https://www.cnblogs.com/BillowJ/p/12759218.html
Copyright © 2011-2022 走看看