首页 > 试题广场 > 括号配对问题
[编程题]括号配对问题
括号配对问题

输入描述:
给定一个字符串S,请检查该字符串的括号是否配对,只含有"[", "]", "(", ")"


输出描述:
配对,返回true

不配对,返回false
示例1

输入

abcd(])[efg

输出

false
""""
括号匹配,借助栈后进先出的性质
"""

if __name__ == "__main__":
    s = input().strip()
    ans = True
    flag = []
    for c in s:
        if c == '[' or c == '(':
            flag.append(c)
        elif c == ']':
            if not flag or flag.pop() != '[':
                ans = False
                break
        elif c == ')':
            if not flag or flag.pop() != '(':
                ans = False
                break
        else:
            pass
    if flag:
        ans = False
    print("true" if ans else "false")

编辑于 2019-07-12 11:22:20 回复(0)
循环结束后还应该判断一下栈内是否为空,若为空再返回true
例如:输入为"(()()()",返回应该为false,本例返回true
发表于 2019-06-26 09:27:41 回复(1)
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        String str = in.nextLine();
        Stack<Character> stack = new Stack<>();
        for (int i=0;i<str.length();i++){
            char c = str.charAt(i);
            if (c == '(' || c == '[')
                stack.push(c);
            else if (c == ')'){
                if (stack.isEmpty() || stack.pop() != '(') {
                    System.out.println(false);
                    return;
                }
            }else if (c == ']'){
                if (stack.isEmpty() || stack.pop() != '[') {
                    System.out.println(false);
                    return;
                }
            }
        }
        if (stack.isEmpty())
            System.out.println(true);
        else
            System.out.println(false);
    }
}

发表于 2019-08-14 15:27:33 回复(0)
s = input()
left = ['[','(']
right = [']',')']
pair = {'[':']','(':')'}
res = []
for i in s:
    if i in left:
        res.append(i)
    if i in right:
        if res and pair[res[-1]]==i:
            res.pop()
        else:
            res.append(i)
            break
print('true' if not res else 'false')

发表于 2019-07-09 21:56:57 回复(0)
#include <bits/stdc++.h>
using namespace std;
int main()
{
    string s;
    cin>>s;
    stack<char>st;
    for(int i=0;i<s.size();i++)
    {
        if(s[i]=='('||s[i]=='[')
            st.push(s[i]);
        else if(s[i]==')')
        {
            if(st.top()=='(')
                st.pop();
            else
            {
                cout<<"false";
                return 0;
            }
        }
        else if(s[i]==']')
        {
            if(st.top()=='[')
                st.pop();
            else
            {
                cout<<"false";
                return 0;
            }
        }
        else
            continue;
    }
    if(st.empty())
        cout<<"true";
    else
        cout<<"false";
    return 0;
}

发表于 2019-07-03 10:31:03 回复(0)