验证给定格式的字符串

最近,有人要求我实现一个有趣的算法。我有一个函数(isValidString)。它应该返回true,如果给定的字符串有效或无效。字符串模式看起来像一个有效的表达式。我的第一个想法是使用一个正则表达式,然后我决定收集一个对象中出现的字符串键,并检查它是否是偶数等等……但有很多其他情况下可以存在。请问有什么办法可以有效的实现这个算法?谢谢大家

下面是它的样子。

function isValidString(string) {

}

//Patterns for the valid string:

isValidString('{([])}') //should return true
isValidString('{(([{}]))}') //should return true
isValidString('{[[()]]}') //should return true

isValidString('{[}()]}') //should return false
isValidString('{{}()]}') //should return false
isValidString('{(})[]}') //should return false

解决方案:

我假设 “有效 “是指那些括号平衡且格式良好的字符串。

你可以使用下面的函数。

const isValidString = (sample) => {
    const stack = [] // This is a helper stack we will push the characters
    // We start looping through the characters
    for (char of sample){
        // If its an opening bracket we just push it to the stack
        if (['(', '[', '{'].includes(char)) {
            stack.push(char)
        } else {
            // If we find a closing bracket we check if the previous matchs it as its opening bracket
            const last = stack.pop()
            // If doesnt match the previous bracket, we return false. We found a wrong formed bracket!
            // If it matches, contine looping
            if (
                char === ')' && last !== '(' || 
                char === '}' && last !== '{' || 
                char === ']' && last !== '['
            ) return false
        }
    }
    // If theres no characters left in the stack means that all opening brackets have been popped succesfully from the stack when we found its closing bracket
    return stack.length === 0
}

console.log(isValidString('{([])}')) //should return true
console.log(isValidString('{(([{}]))}')) //should return true
console.log(isValidString('{[[()]]}')) //should return true

console.log(isValidString('{[}()]}')) //should return false
console.log(isValidString('{{}()]}')) //should return false
console.log(isValidString('{(})[]}')) //should return false

给TA打赏
共{{data.count}}人
人已打赏
解决方案

如何用jQuery改变按钮的文字?

2022-4-21 19:09:27

解决方案

为什么这种使用count()的方式在php中是无效的?

2022-4-21 19:09:29

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索