括號匹配算法


括號匹配算法

題目來自網絡搜集和常考算法,如有侵權請聯系我

題目描述

給出一個僅包含字符'(',')','{','}','['和']',的字符串,判斷給出的字符串是否是合法的括號序列
括號必須以正確的順序關閉,"()"和"()[]{}"都是合法的括號序列,但"(]"和"([)]"不合法。

  • 示例1

輸入

"["

輸出

false
  • 示例2

輸入

"[]"

輸出

true

C++

#include<unordered_map>
class Solution {
public:
	/**
	 *
	 * @param s string字符串
	 * @return bool布爾型
	 */
	bool isValid(string s) {
		// write code here
		unordered_map<char,char> m = { {')','('},{']','['},{'}','{'} };
		stack<char> st;
        int len=s.length();
		for (int i=0;i<len;i++) {
			if (s[i] == '(' || s[i] == '[' || s[i] == '{') {
				st.push(s[i]);
			}
			else if (st.empty())  return false;
            else if (st.top() != m[s[i]]) return false;
            else st.pop();
		}
		return st.empty();
	}
};

C語言

#include <stdio.h>
#include <string.h>
int top=-1;//top變量時刻表示棧頂元素所在位置
void push(char * a,int elem){
    a[++top]=elem;
}
void pop(char* a){
    if (top==-1) {
        return ;
    }
    top--;
}
char visit(char * a){
    //調取棧頂元素,不等於彈棧,如果棧為空,為使程序不發生錯誤,返回空字符
    if (top!=-1) {
        return a[top];
    }else{
        return ' ';
    }
}
int main() {
    char a[30];
    char bracket[100];
    printf("請輸入括號序列:");
    scanf("%s",bracket);
    getchar();
    int length=(int)strlen(bracket);
    for (int i=0; i<length; i++) {
        //如果是左括號,直接壓棧
        if (bracket[i]=='('||bracket[i]=='{') {
            push(a, bracket[i]);
        }else{
            //如果是右邊括號,判斷與棧頂元素是否匹配,如果匹配,棧頂元素彈棧,程序繼續運行;否則,發現括號不匹配,輸出結果直接退出
            if (bracket[i]==')') {
                if (visit(a)=='(') {
                    pop(a);
                }else{
                    printf("括號不匹配");
                    return 0;
                }
            }else{
                if (visit(a)=='{') {
                    pop(a);
                }else{
                    printf("括號不匹配");
                    return 0;
                }
            }
        }
    }
    //如果所有括號匹配完成,棧內為空,說明所有括號全部匹配成功
    if (top!=-1) {
         printf("括號不匹配");
    }else{
       printf("括號匹配");
    }
}

Java

import java.util.Stack;

public class Solution {
    public boolean isValid(String s) {
		Stack<Character> stack = new Stack<Character>();
		for (char c : s.toCharArray()) {
			if (c == '(')
				stack.push(')');
			else if (c == '{')
				stack.push('}');
			else if (c == '[')
				stack.push(']');
			else if (stack.isEmpty() || stack.pop() != c)
				return false;
		}
		return stack.isEmpty();
	}
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM