验证给定格式的字符串
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了验证给定格式的字符串相关的知识,希望对你有一定的参考价值。
最近,有人要求我实现一个有趣的算法。我有一个函数(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
另一答案
function isValidString(str){
const matches = {
"[": "]",
"{": "}",
"(": ")"
}
if(str.length % 2){
return false
}
let len = str.length / 2
str1 = str.substr(0,len)
str2 = str.substr(len,str.length).split("").reverse().join("");
return str1.split("").every((char,idx) => matches[char] == str2[idx])
}
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
以上是关于验证给定格式的字符串的主要内容,如果未能解决你的问题,请参考以下文章