leetcode 20. Valid Parentheses

来源:互联网 发布:mysql修改参数为自增 编辑:程序博客网 时间:2024/06/16 06:33

Given a string containing just the characters ‘(‘, ‘)’, ‘{‘, ‘}’, ‘[’ and ‘]’, determine if the input string is valid.

The brackets must close in the correct order, “()” and “()[]{}” are all valid but “(]” and “([)]” are not.

这道题就是判断括号的配对的正确与否,使用stack即可解决。主要思路如下:遍历字符串即可,
1)遇到左括号,直接入栈;
2)遇到右括号,判断右括号与栈顶元素是否配对;
a) 假如不配对,表示整体不配对;
b) 假如配对,出栈。
3)遍历结束的时候,假如栈不空,表示不配对,否者配对成功。

建议和leetcode 32. Longest Valid Parentheses 最长有效括号长度和 leetcode 678. Valid Parenthesis String 有效括号的判断 一起学习

代码如下:

import java.util.ArrayList;import java.util.List;public class Solution {    public boolean isValid(String s)    {        boolean res=true;        if(s==null || s.length()<=0)            return res;        if(s.length()%2==1)            return false;        List<Character> stack=new ArrayList<Character>();        for(int i=0;i<s.length();i++)        {            char n=s.charAt(i);            if(n=='(' || n=='[' || n=='{')                stack.add(n);            else if(n==')' || n==']' || n=='}')            {                if(stack.isEmpty())                {   //第一个字符就是闭合字符,比如] } )                    res=false;                    break;                }                if(stack.get(stack.size()-1)==getDui(n))                    stack.remove(stack.size()-1);                else                 {  //匹配错误                    res=false;                     break;                }            }            else             {  //出现了不该出现的字符                res=false;                break;            }        }                //stack不为空必然就是不匹配,比如 ((        if(res==true && stack.size()>0)            res=false;        return res;    }    private Character getDui(char n)     {        char res=' ';        switch (n) {        case ')':            res='(';            break;        case ']':            res='[';            break;        case '}':            res='{';            break;        default:            break;        }        return res;    }}

C++的代码如下:

#include <iostream>#include <stack>using namespace std;class Solution {public:    bool isValid(string s)     {        if (s.length() <= 0)            return true;        stack<char> my;        for (int i = 0; i < s.length(); i++)        {            char a = s[i];            if (a == '(' || a == '{' || a == '[')                my.push(a);            else if (a == ')' || a == '}' || a == ']')            {                if (my.empty())                    return false;                else                {                    char b = getDuiYing(a);                    cout << a << "   " << b << endl;                    if (my.top() == b)                        my.pop();                    else                        return false;                }            }        }        return my.empty();    }    char getDuiYing(char a)    {        switch (a)        {        case ')':            return '(';        case ']':            return '[';        case '}':            return '{';        default:            return a;        }    }};
原创粉丝点击