今天的daily challenge题目是917. Reverse Only Letters,是easy的题目,不过可以应用到stack的概念!我们一起来看看吧!
看到这题目当下有两种作法想法:
在此之前,要判断一个字元是否为英文字,除了可以暴力的使用-'a'跟-'A'来看是否位於0~25之间(隐含转换的用法可以参考Day 3提过的内容,这几天也都有用到),也可以使用isalpha()
这个函式。
我们直接来看看以上两种做法分别怎麽做呢~
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;
}
};
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.则不需要额外的空间。
不知道发文还能撑几天,最近太忙了,但还是很希望可以藉此来累积一点工作以外的成就>"<
但最近也在想也许取舍很重要,要懂得自己到底想要什麽,不要太贪心什麽都要做。
至少每天花个半小时~一小时写写题目,写写文章,不知道在哪方面会有所收获呢!
>>: DAY 1:Hey! Go Design Patterns
前言 昨天聊了 callback 与 Promise,是如何过关斩将,不断克服障碍走到 ES6。 然...
在开始之前,我可能需要先给各位科普一些基础的CG动画(Computer Graphic)常识~也就是...
JAVA 优点: 跨平台 物件导向特性 广泛应用於企业及 Web 应用开发和行动应用开发。 编译语言...
写在前面 刚开始学程序语言的时候总会有一些看起来很简单但很容易跳进去的坑,基础运算子还有逻辑运算在我...
今天我们要来介绍 EBS Type方案比较,那我们开始吧! 在之前的文章中我们有提过,EBS 相对...