面试题之:括号是否匹配

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>            

 

posted on 2019-10-15 14:31  bala001  阅读(477)  评论(0编辑  收藏  举报

导航