zoukankan      html  css  js  c++  java
  • 面试题58:翻转字符串

    1 题目描述

      牛客最近来了一个新员工Fish,每天早晨总是会拿着一本英文杂志,写些句子在本子上。同事Cat对Fish写的内容颇感兴趣,有一天他向Fish借来翻看,但却读不懂它的意思。例如,“student. a am I”。后来才意识到,这家伙原来把句子单词的顺序翻转了,正确的句子应该是“I am a student.”。Cat对一一的翻转这些单词顺序可不在行,你能帮助他么?

    2 输入

    string str

    3 输出

    string str

    4 样例输入

    “I am a student.”
    

    5 样例输出

    “student. a am I”
    

    6 求解思路

      两次翻转字符串,第一次翻转整个串,第二次翻转子串。

    #include <iostream>
    #include <cstdio>
    #include <cstring>
    #include <string>
    #include "MyUtils.h"
    using namespace std;
    
    void Reverse(string &str, int begin, int end){
        if(str.length() < 1 || begin == end)
            return ;
    
        while(begin < end){
            char temp = str[end];
            str[end] = str[begin];
            str[begin] = temp;
            begin++;
            end--;
        }
    }
    
    string ReverseSentence(string str){
        int length = str.length();
        if(length < 1)
            return str;
        int begin = 0;
        int end = length - 1;
        // 先翻转整个串
        Reverse(str, begin, end);
        // 再分别翻转里面的串
        begin = 0;
        end = 0;
        while(begin < length){
            if(str[end] == ' ' || end == length){
                Reverse(str, begin, end - 1);
                end++;
                begin = end;
            }
            else
                end++;
        }
        return str;
    }
    
    int main()
    {
        string str = "I am a student.";
        cout<<ReverseSentence(str);
        return 0;
    }
    
    
  • 相关阅读:
    BZOJ4327 : JSOI2012 玄武密码
    BZOJ4303 : 数列
    BZOJ1077 : [SCOI2008]天平
    BZOJ1829 : [Usaco2010 Mar]starc星际争霸
    BZOJ1770 : [Usaco2009 Nov]lights 燈
    BZOJ3012 : [Usaco2012 Dec]First!
    BZOJ4320 : ShangHai2006 Homework
    BZOJ4311 : 向量
    BZOJ3075 : [Usaco2013]Necklace
    BZOJ4304 : 道路改建
  • 原文地址:https://www.cnblogs.com/flyingrun/p/13556644.html
Copyright © 2011-2022 走看看