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

    本题来自《剑指offer》 翻转单词顺序列

    题目:

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

    思路:

       1.先翻转整个字符

      2.翻转单个字符

      只需要找到要翻转字符的始末下标即可。

      单个字符要以单词之间的空格作为分割条件。先检测起始是否到达空格,否则便后标自加到单词末尾,到了单词的末尾,便开始翻转,并开始下个单词的翻转。

    C++ Code:

    class Solution {
    public:
        string ReverseSentence(string str) {
            if (str.size()<=0){                        //boundary condition judgement
                return "";                             //return empty string
            }
            char* begin = &str[0];                    //get first point
            char* end = begin;                        //initial end point equal first point
            while(*end!=''){                        //get the last point of str
                end++;
            }
            end--;
            Reverse(begin,end);                       //reverse all str
            begin = &str[0];                          //reinitial vartion vaule
            end = begin;
            while(*begin!=''){                      //loop condition
                if(*begin==' '){                      //single character
                    begin++;
                    end++;
                }else if(*end==''||*end==' '){      //at the end of one of the characters
                    Reverse(begin,--end);             //reverse one character
                    begin = ++end;                    //restart
                }else{
                    end++;                            //get one of the characters
                }
            }
            return str;
        }
        void Reverse(char* begin,char* end){         //program of reverse
            if (begin==NULL || end==NULL){           //empty pointer detection
                return ;                             //return NULL
            }
            while(begin<end){
                char temp =*begin;                   //swap the character
                *begin = *end;
                *end = temp;
                begin++;                             //pointer increase
                end--;
            }
        }
    };

    Python Code:

    # -*- coding:utf-8 -*-
    class Solution:
        def ReverseSentence(self, s):
            # write code here
                word_s = s.split(' ')
                return ' '.join(word_s[::-1])

    总结:

  • 相关阅读:
    C语言实现快排
    C语言实现双向循环链表
    mysql插入数据后返回自增ID的方法
    golang flag包简单例子
    练习题 (六)
    练习题 (五)
    练习题 (四)
    练习题 (三)
    练习题 (二)
    练习题 (一)
  • 原文地址:https://www.cnblogs.com/missidiot/p/10783751.html
Copyright © 2011-2022 走看看