zoukankan      html  css  js  c++  java
  • 面试题之:括号是否匹配

    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>            
  • 相关阅读:
    对于线程同步的浅薄理解
    线程安全之ConcurrentQueue<T>队列
    关于mybatis拦截器,对结果集进行拦截
    oracle 分析函数
    C# ikvm 运行htmlunit Provider com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderFactoryImpl not found
    IronJs 无相关源?
    js div 内容显示分页
    JavascriptTAB切换 AND JqueryTAB切换
    php中mysql数据库操作类 -李盛鹏 -博客园
    sublime text 之snippet功能的使用 -李盛鹏 -博客园
  • 原文地址:https://www.cnblogs.com/bala/p/11677518.html
Copyright © 2011-2022 走看看