您的位置:首页 > 其它

leetcode 20. Valid Parentheses

2017-08-31 16:33 399 查看
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;
}
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  leetcode