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;
        }
    };
  • 相关阅读:
    ✨Synchronized底层实现---偏向锁
    🌞LCP 13. 寻宝
    ✨Synchronized底层实现---概述
    ⛅104. 二叉树的最大深度
    c++多线程之顺序调用类成员函数
    C++ STL实现总结
    C#小知识
    C#中HashTable和Dictionary的区别
    WPF的静态资源(StaticResource)和动态资源(DynamicResource)
    WPF之再谈MVVM
  • 原文地址:https://www.cnblogs.com/BillowJ/p/12759218.html
Copyright © 2011-2022 走看看