• 剑指offer58. 翻转单词顺序


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

    • 无空格字符构成一个单词。
    • 输入字符串可以在前面或者后面包含多余的空格,但是反转后的字符不能包括。
    • 如果两个单词间有多余的空格,将反转后单词间的空格减少到只含一个。
    class Solution {
    public:
        string reverseWords(string s) {
            reverse(s.begin(), s.end());
            int idx = 0, n = s.size();
            for (int i = 0; i < n; ++i) {
                if (s[i] != ' ') {
                    // idx记录上一个单词结尾的位置
                    // 如果不是第一个单词,两个单词间要插个空格
                    if (idx != 0) s[idx++] = ' ';
                    // 原串新单词开始的索引j
                    int j = i;
                    // 单词要整体左移,覆盖掉两个单词间多余的空格
                    while (j < n && s[j] != ' ') {
                        s[idx++] = s[j++];
                    }
                    // 翻转更新后的s的当前单词
                    reverse(s.begin() + idx - (j - i), s.begin() + idx);
                    i = j;
                }
            }
            // 删除最后一个单词后的所有空格
            s.erase(s.begin() + idx, s.end());
            return s;
        }
    };
  • 相关阅读:
    iOS 自动识别URL(链接)功能的实现
    iOS 如何查看崩溃日志
    Swift-- 闭包
    Swift--方法(函数)
    Swift--控制流
    Swift--字典的了解
    数据存储与访问之——SharedPreferences
    汇编指令之STOS、REP
    汇编指令之ADC、SBB、XCHG、MOVS指令
    pushad与popad
  • 原文地址:https://www.cnblogs.com/betaa/p/12671027.html
Copyright © 2020-2023  润新知