1、写一个函数,判断括号是不是匹配,括号有三种 可以嵌套, [](()){}
2、给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串,判断字符串是否有效。
有效字符串需满足:
左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
注意空字符串可被认为是有效字符串。
示例 1:
输入: “{[]}”
输出: true
示例 2:
输入: “([)]”
输出: false
代码如下:
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
<style>
.result{
margin-top: 30px;
padding: 20px 10px;
border: 1px solid #999;
background-color: beige
}
</style>
</head>
<body>
<p>
1、写一个函数,判断括号是不是匹配,括号有三种 可以嵌套, [](()){}<br/>
2、给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串,判断字符串是否有效。
<p>有效字符串需满足:</p>
左括号必须用相同类型的右括号闭合。<br/>
左括号必须以正确的顺序闭合。<br/>
注意空字符串可被认为是有效字符串。<br/>
示例 1:<br/>
输入: “([)]”<br/>
输出: false<br/>
示例 2:<br/>
输入: “{[]}()”<br/>
输出: true
</p>
<input type="text" id="input" placeholder="请输入" />
<button onclick="set()">开始匹配</button>
<div class="result">
结果:<div id="result"></div>
</div>
</body>
<script>
const moduleJson = { // 需要匹配的模板
')': '(',
'}': '{',
']': '['
}
let result = document.getElementById('result') // 结果显示
function set(){
let str = document.getElementById('input').value
if(!str){
alert('请输入!')
}
this.match(str)
}
function match(str){
let tempSaveArray = [] // 栈 // 用户存储数据
let len = str.length // length 可以用于返回字符串 / 数组 的长度
// 入栈
for(let i = 0; i< str.length; i++){
for(let key in moduleJson){
if(str[i] == key || str[i] == moduleJson[key]){ // 如果是括号,就入栈
tempSaveArray.push(str[i])
}
}
}
// 判断栈的长度
if(tempSaveArray.length){
if((tempSaveArray.length % 2) != 0){ //为奇数,肯定不匹配
result.innerText = '不匹配!'
}else{
for(let j = 0; j < tempSaveArray.length; j++){
if(moduleJson[tempSaveArray[j]]){ // 如果是括号,就和前一个匹配
if(j > 0){ // 不能为第一个
if(moduleJson[tempSaveArray[j]] == tempSaveArray[j-1]){ // 与前一个元素匹配
tempSaveArray.splice(j-1, 2) //出栈 splice(index, howmany, item)
j = 0 // 重新遍历数组
}
}
}
}
// 判断栈中是否还有数据
if(tempSaveArray.length){
result.innerText = 'false'
}else{
result.innerText = 'true'
}
}
}else{
result.innerText = '输入的字符串中不包含需要匹配的括号!'
}
}
</script>
</html>
知识兔