zoukankan      html  css  js  c++  java
  • 翻转单词顺序列

    翻转单词顺序列

    题目描述

    输入一个英文句子, 翻转句子中单词的顺序, 但单词内字符的顺序不变. 为简单起见, 标点符号和普通字母一样处理. 例如输入字符串"Iam a student.", 则输出"student. a am I".

    牛客上看的这个简洁

    class Solution {
    public:
        string ReverseSentence(string str) {
            string ret = "";
            string temp = "";
            
            for (int i = 0; i < str.length(); i++) {
                if (' ' == str[i]) {    // 交换单词顺序, 并在前面添加空格
                    ret = ' ' + temp + ret;
                    temp = "";
                }
                else {                // 翻转单词
                    temp += str[i];
                }
            }
            
            // 这里交换上一个for循环中并没有交换最后一个单词
            if (str.length()) {
                ret = temp + ret;
            }
            
            return ret;
        }
    };
    

    这个和下面那个只差翻转单词时的定位不同, 下面那个用两个变量界定单词范围, 这个使用三个变量界定单词范围

    class Solution {
    public:
        void reverseWorld(string &str, int begin, int end) {
            while (begin < end) {
                swap(str[begin++], str[end--]);
            }
        }
        
        string ReverseSentence(string str) {
            if(1 >= str.length()) {
                return str;
            }
            int begin = 0;
            int end = str.length() - 1;
            // 翻转字符串
            reverseWorld(str, begin, end);
    
            begin = end = 0;
            int i = 0;
            while (i < str.length()) {
                while ((i < str.length()) && str[i] == ' ') {
                    i++;
                }
                begin = i;    // 单词开始位置
                while ((i < str.length()) && str[i] != ' ') {
                    i++;
                }
                end = i - 1;    // 单词结束位置
                // 翻转单词
                reverseWorld(str, begin, end);
            }
            return str;
        }
    };
    
    class Solution {
    public:
        void reverseWorld(string &str, int begin, int end) {
            while (begin < end) {
                swap(str[begin++], str[end--]);
            }
        }
        
        string ReverseSentence(string str) {
            // 翻转字符串
            if(1 >= str.length()) {
                return str;
            }
            int begin = 0;
            int end = str.length() - 1;
            reverseWorld(str, begin, end);
            
            begin = 0;
            end = 0;
            while (end < str.length()) {
                while ((end < str.length() - 1) && (' ' != str[end])) {
                //while (' ' != str[end]) {    // 定界错误
                    end++;
                }
                
                if (end == str.length() - 1) {
                    reverseWorld(str, begin, end);
                    break;
                }
                else {
                    reverseWorld(str, begin, end - 1);
                    begin = end + 1;
                    end += 1;
                }
                
            }
            return str;
        }
    };
    
  • 相关阅读:
    Hadoop书籍介绍
    WeakReference,SoftReference 和 PhatomReference 浅析
    如何在Java中定义常量(Constant)
    也谈谈Java的垃圾收集(garbage collection)
    csdn的新家
    安装和使用Oracle Instant Client 和 SQLPlus
    Perl中的grep和map
    用Devel::NYTProf 优化perl脚本性能
    DataBase
    Linux下配置listener和tns
  • 原文地址:https://www.cnblogs.com/hesper/p/10526665.html
Copyright © 2011-2022 走看看