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] != ‘\0‘){
            if(str[start] == ‘ ‘){
                ++start;
            }
            else if(str[end] == ‘ ‘ || str[end] == ‘\0‘){
                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;
}
};

原文地址:https://www.cnblogs.com/dingxiaoqiang/p/8207244.html

时间: 2024-08-05 02:37:20

42翻转单词顺序列+注意该题找单词的方法的相关文章

翻转单词顺序列-剑指Offer

翻转单词顺序列 题目描述 牛客最近来了一个新员工Fish,每天早晨总是会拿着一本英文杂志,写些句子在本子上.同事Cat对Fish写的内容颇感兴趣,有一天他向Fish借来翻看,但却读不懂它的意思.例如,“student. a am I”.后来才意识到,这家伙原来把句子单词的顺序翻转了,正确的句子应该是“I am a student.”.Cat对一一的翻转这些单词顺序可不在行,你能帮助他么? 思路 我们先对整句话做一个翻转,再对每个单词做翻转 注意:每次循环的去翻转两个空格之间的单词,并且在翻转最后

《剑指offer》第五十八题(翻转单词顺序)

// 面试题58(一):翻转单词顺序 // 题目:输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变. // 为简单起见,标点符号和普通字母一样处理.例如输入字符串"I am a student. ", // 则输出"student. a am I". #include <iostream> void Reverse(char *pBegin, char *pEnd); char* ReverseSentence(char *pData) {

剑指offer系列源码-翻转单词顺序

题目1361:翻转单词顺序 时间限制:2 秒内存限制:32 兆特殊判题:否提交:1935解决:572 题目描述: JOBDU最近来了一个新员工Fish,每天早晨总是会拿着一本英文杂志,写些句子在本子上.同事Cat对Fish写的内容颇感兴趣,有一天他向Fish借来翻看,但却读不懂它的意思.例如,"student. a am I".后来才意识到,这家伙原来把句子单词的顺序翻转了,正确的句子应该是"I am a student.".Cat对一一的翻转这些单词顺序可不在行,

Reverse Words in a String 翻转一个字符串里的单词顺序 @LeetCode

LeetCode新题,但是比较简单,直接用栈即可 Given an input string, reverse the string word by word. For example,Given s = "the sky is blue",return "blue is sky the". click to show clarification. Clarification: What constitutes a word?A sequence of non-sp

【剑指offer】翻转单词顺序

转载请注明出处:http://blog.csdn.net/ns_code/article/details/27372033 题目描写叙述: JOBDU近期来了一个新员工Fish,每天早晨总是会拿着一本英文杂志,写些句子在本子上.同事Cat对Fish写的内容颇感兴趣,有一天他向Fish借来翻看.但却读不懂它的意思.比如,"student. a am I".后来才意识到.这家伙原来把句子单词的顺序翻转了,正确的句子应该是"I am a student.". Cat对一一

编程算法 - 翻转单词顺序 代码(C)

翻转单词顺序 代码(C) 本文地址: http://blog.csdn.net/caroline_wendy 题目: 输入一个英文句子, 翻转句子中单词的顺序, 但单词内字符的顺序不变. 首先翻转(reverse)整个句子, 然后查找空格, 如遇到空格, 则翻转前面的单词, 或遇到结束符, 同样进行翻转. 代码: /* * main.cpp * * Created on: 2014.6.12 * Author: Spike */ /*eclipse cdt, gcc 4.8.1*/ #inclu

剑指OFFER之翻转单词顺序

题目描述: JOBDU最近来了一个新员工Fish,每天早晨总是会拿着一本英文杂志,写些句子在本子上.同事Cat对Fish写的内容颇感兴趣,有一天他向Fish借来翻看,但却读不懂它的意思.例如,“student. a am I”.后来才意识到,这家伙原来把句子单词的顺序翻转了,正确的句子应该是“I am a student.”.Cat对一一的翻转这些单词顺序可不在行,你能帮助他么? 输入: 每个测试案例为一行,表示一句英文句子. 我们保证一个句子的单词数不会超过600,每个单词的长度也不会超过30

[Jobdu] 题目1361:翻转单词顺序

题目描述: JOBDU最近来了一个新员工Fish,每天早晨总是会拿着一本英文杂志,写些句子在本子上.同事Cat对Fish写的内容颇感兴趣,有一天他向Fish借来翻看,但却读不懂它的意思.例如,"student. a am I".后来才意识到,这家伙原来把句子单词的顺序翻转了,正确的句子应该是"I am a student.".Cat对一一的翻转这些单词顺序可不在行,你能帮助他么? 输入: 每个测试案例为一行,表示一句英文句子. 我们保证一个句子的单词数不会超过600

NYOJ 1085 数单词 (AC自动机模板题)

数单词 时间限制:1000 ms  |  内存限制:65535 KB 难度:4 描述 为了能够顺利通过英语四六级考试,现在大家每天早上都会早起读英语. LYH本来以为自己在6月份的考试中可以通过六级,可是没想到,成绩出来以后,居然没有通过.所以他不得不付出更多的时间来学习英语. 要想通过六级,最基本的要求就是词汇量.为了能够更快的记住一些陌生单词,LYH有时会找一些英语文章来读. 今天早上,LYH又找了一篇文章.读之前,他突然萌生出一个想法:文章中哪些单词出现的次数最多呢? 输入 第一行输入一个