1003. 检查替换后的词是否有效

91 阅读1分钟

给你一个字符串 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)

链接:leetcode.cn/problems/ch…

著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。