[Day 9] Leetcode 917. Reverse Only Letters (C++)

前言

今天的daily challenge题目是917. Reverse Only Letters,是easy的题目,不过可以应用到stack的概念!我们一起来看看吧!

想法

看到这题目当下有两种作法想法:

  1. 用stack来存:先遍历过一次,把所有的英文字母存入stack中,再遍历一次,把stack里面的东西pop出来,结束!
  2. 头尾扫描:同时从头、跟从尾出发,直到两个都遇到英文字母为止,然後使用swap进行交换

在此之前,要判断一个字元是否为英文字,除了可以暴力的使用-'a'跟-'A'来看是否位於0~25之间(隐含转换的用法可以参考Day 3提过的内容,这几天也都有用到),也可以使用isalpha()这个函式。
我们直接来看看以上两种做法分别怎麽做呢~


  1. stack版本
class Solution {
public:
    string reverseOnlyLetters(string s) {
        // if english char, save to stack
        stack<int> st;
        for(int i=0;i<s.length();++i){
            if(isalpha(s[i])){
                st.push(s[i]);
            }
        }
        // iterate again
        string ans;
        for(int i=0;i<s.length();++i){
            if(isalpha(s[i])){
                ans+=st.top();
                st.pop();
            }else{
                ans+=s[i];
            }
        }
        return ans;
    }
};
  1. 头尾扫描
class Solution {
public:
    string reverseOnlyLetters(string s) {
        // 2 pointers
        int l = 0;
        int r = s.length() - 1;
        
        while(l<r){
            while(l<s.length() && !isalpha(s[l])){
                ++l;
            }
            while(r>=0 && !isalpha(s[r] )){
                --r;
            }
            if(l>=r){
                break;
            }
            swap(s[l],s[r]);
            ++l;
            --r;
        }
        return s;
    }
};

以上两个时间复杂度都是O(n),不过1.要扫两次,2.只要扫一次
另外空间复杂度,1.需要O(k)的空间来存,2.则不需要额外的空间。

结语

不知道发文还能撑几天,最近太忙了,但还是很希望可以藉此来累积一点工作以外的成就>"<
但最近也在想也许取舍很重要,要懂得自己到底想要什麽,不要太贪心什麽都要做。
至少每天花个半小时~一小时写写题目,写写文章,不知道在哪方面会有所收获呢!


<<:  Google无法移除侵权网址127.0.0.1

>>:  DAY 1:Hey! Go Design Patterns

Day 16 - Asynchronous 非同步进化顺序 - Async/Await

前言 昨天聊了 callback 与 Promise,是如何过关斩将,不断克服障碍走到 ES6。 然...

Day 21 - 物理模拟篇 - 原生Canvas建构粒子系统 - 成为Canvas Ninja ~ 理解2D渲染的精髓

在开始之前,我可能需要先给各位科普一些基础的CG动画(Computer Graphic)常识~也就是...

[JAVA 环境]JDK与环境变数安装

JAVA 优点: 跨平台 物件导向特性 广泛应用於企业及 Web 应用开发和行动应用开发。 编译语言...

Day 3 Ruby 基础运算子

写在前面 刚开始学程序语言的时候总会有一些看起来很简单但很容易跳进去的坑,基础运算子还有逻辑运算在我...

Day 11 运算宝石:EC2 储存资源 EBS Types 方案比较

今天我们要来介绍 EBS Type方案比较,那我们开始吧! 在之前的文章中我们有提过,EBS 相对...