题目描述
实现思路
题目的实质 其实是检查给定的字符串中 是否含有指定顺序的 'a' 'b' 'c'序列
很容易想到用栈来实现
首先,检查给定字符串的长度,如果不是3的倍数,一定不是有效的
其次,遍历字符串
1、若当前栈长度大于等于3,则检查靠近栈顶的3个元素是否分别为 'c',' b', 'a'
如果是,则做3次出栈(pop)操作
2、无论是否做出栈,都将当前字符推入栈
最后,检查栈是否空
如果栈已空,说明字符串中都是有序的abc序列,否则不是有效的
代码实现(Javascript)
要注意的是,遍历字符串的时候,应该走(数组长度+1)次
最后一次不作入栈操作
/**
* @param {string} s
* @return {boolean}
*/
var isValid = function(s) {
var len=s.length
if(len%3!==0){
return false
}
var stack=new Array()
for(let i=0;i<=s.length;i++){
if(stack.length>=3){
if(stack[stack.length-1]==='c'&&stack[stack.length-2]==='b'&&stack[stack.length-3]==='a'){
for(let j=0;j<3;j++){
stack.pop()
}
}
}
if(i===s.length){
break
}else{
stack.push(s[i])
}
}
return stack.length===0 ? true : false
};