给你一个字符串 s ,请你判断它是否 有效 。
字符串 s 有效 需要满足:假设开始有一个空字符串 t = "" ,你可以执行 任意次 下述操作将 t 转换为 s :
- 将字符串
"abc"插入到t中的任意位置。形式上,t变为tleft``+ "abc" + tright,其中t == tleft + tright。注意,tleft和tright可能为 空 。
如果字符串 s 有效,则返回 true;否则,返回 false。
示例 1:
输入: s = "aabcbc"
输出: true
解释:
"" -> "abc" -> "aabcbc"
因此,"aabcbc" 有效。
示例 2:
输入:s = "abcabcababcc"
输出:true
解释:
"" -> "abc" -> "abcabc" -> "abcabcabc" -> "abcabcababcc"
因此,"abcabcababcc" 有效。
示例 3:
输入: s = "abccba"
输出: false
解释: 执行操作无法得到 "abccba" 。
题解 :
/**
* @param {string} s
* @return {boolean}
*/
// 方法一:栈结构处理
var isValid = function (s) {
// 边界判断
if (s.length < 3) return false
const stack = []
for (let i = 0; i < s.length; i++) {
if (s[i] === 'c') {
let b = stack.pop()
let a = stack.pop()
if (a != 'a' || b != 'b') {
return false
}
} else {
stack.push(s[i])
}
}
return stack.length == 0
};
// 方法二:循环替换
var isValid = function (s) {
while (s.indexOf('abc') >= 0) {
s = s.replace(/abc/gi, '')
}
return !s.length
};
// 方法三:递归
var isValid = function (s) {
s = s.replace(/abc/gi, '')
if (s.includes('abc')) {
return isValid(s)
}
return !s.length
}
来源:力扣(LeetCode)
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。