• 【剑指Offer面试编程题】题目1361:翻转单词顺序--九度OJ


    题目描述:
    JOBDU最近来了一个新员工Fish,每天早晨总是会拿着一本英文杂志,写些句子在本子上。同事Cat对Fish写的内容颇感兴趣,有一天他向Fish借来翻看,但却读不懂它的意思。例如,“student. a am I”。后来才意识到,这家伙原来把句子单词的顺序翻转了,正确的句子应该是“I am a student.”。Cat对一一的翻转这些单词顺序可不在行,你能帮助他么?
    输入:
    每个测试案例为一行,表示一句英文句子。
    我们保证一个句子的单词数不会超过600,每个单词的长度也不会超过30。但是需要注意的是Fish是个不拘小节的人,有时候两个单词中间可能会有很多空格。为了方便起见,你可以认为一行的字符总数不会超过50000个,标点符号可以和普通字母一样处理。
    输出:
    对应每个测试案例,把翻转后的正确的句子单独输出一行。

    样例输入:

    student. a am I
    I'm a Freshman and I like JOBDU!

    样例输出:
    

    I am a student.
    JOBDU! like I and Freshman a I'm
    【解题思路】本题应该是传统的题型的变形,我们可以先读入一行,然后从最后的字符开始处理,对于字符串我们使之逆序输出,对于空格原样输出。

        本题注意两点:空格需要原样输出,不管有多少个;另外,利用gets函数读入一行效率要比getline更高。

    AC code:

    #include <cstdio>
    #include <string>
    #include <cstring>
    #include <iostream>
    using namespace std;
     
    int main()
    {
      char str[50005];
      while(gets(str))
      {
        int len=strlen(str),idx=len-1;
        while(idx>=0)
        {
          while(idx>=0 && str[idx]==' ') putchar(str[idx--]);
          int end=idx;
          while(idx>=0 && str[idx]!=' ')--idx;
          if(end==-1) break;
          for(int i=idx+1;i<=end;++i)
            putchar(str[i]);
        }
        printf("
    ");
      }
      return 0;
    }
    /**************************************************************
        Problem: 1361
        User: huo_yao
        Language: C++
        Result: Accepted
        Time:50 ms
        Memory:1520 kb
    ****************************************************************/
    题目链接:http://ac.jobdu.com/problem.php?pid=1361

    九度-剑指Offer习题全套答案下载:http://download.csdn.net/detail/huoyaotl123/8276299



  • 相关阅读:
    JAVA8 之 Stream 流(四)
    关于iphone 6s 页面功能不能正常使用问题
    关于ES6语法的 一些新的特性
    微信授权一直跳转
    js 一道题目引发的正则的学习
    关于this在不同使用情况表示的含义
    详细解析arry.map() ,function.apply() 方法
    关于服务器无法在已发送http表头之后设置状态问题
    七牛上传视频并转码
    使用 v-cloak 防止页面加载时出现 vuejs 的变量名
  • 原文地址:https://www.cnblogs.com/huoyao/p/4248879.html
Copyright © 2020-2023  润新知