LeetCode20:Valid Parentheses

原创 2015年11月18日 22:21:13

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.

#include<iostream>
#include<algorithm>
#include<stack>
using namespace std;

//使用压栈的方式解决,题目中还有一种valid情况没有说明,需要我们自己考虑的,就是"({[]})"这种层层嵌套但
//可以完全匹配的,也是valid的一种。解题思路是这样的:我们对字符串S中的每一个字符C,如果C不是右括号,
//就压入栈stack中。如果C是右括号,判断stack是不是空的,空则说明没有左括号,直接返回not valid,
//非空就取出栈顶的字符pre来对比,如果是匹配的,就弹出栈顶的字符,继续取S中的下一个字符;
//如果不匹配,说明不是valid的,直接返回。当我们遍历了一次字符串S后,注意这里还有一种情况,
//就是stack中还有残留的字符没有得到匹配,即此时stack不是空的,这时说明S不是valid的,
//因为只要valid,一定全都可以得到匹配使左括号弹出。
class Solution{
public:
	bool isValid(string s){
		stack<char> stackchar;
		if (s == "") return false;
		int i = 0;
		while(i != s.length())
		{
			char c =s[i];
			if ((c != ')') && (c != ']') && (c != '}')) //字符串S中的每一个字符,如果不是右括号,就压入栈stack中
			{
				stackchar.push(c);
			}
			else
			{
				if (stackchar.size()==0) //如果C是右括号,判断stack是不是空的,空则说明没有左括号,直接返回
					return false;

				char pre = stackchar.top(); //非空就取出栈顶的字符pre来对比,如果是匹配的,就弹出栈顶的字符
				switch (c)
				{
				case ')': 
					if (pre == '(')
						stackchar.pop();
					else
						return false;
						break;

				case ']': 
					if (pre == '[')
						stackchar.pop();
					else
						return false;
					break;

				case '}': 
					if (pre == '{')
						stackchar.pop();
					else
						return false;
					break;
				}
			}
			++i;  //继续取S中的下一个字符
		}
		//遍历字符串s结束后,如果stack中还有残留的字符没有得到匹配,即此时stack不是空的,这时说明S不是valid的
		if (stackchar.size() == 0) 
			return true;
		else
			return false;
	}
};


版权声明:本文为博主原创文章,未经博主允许不得转载。

【LeetCode-面试算法经典-Java实现】【020-Valid Parentheses(括号验证)】

【020-Valid Parentheses(括号验证)】【LeetCode-面试算法经典-Java实现】【所有题目目录索引】原题  Given a string containing just th...
  • DERRANTCM
  • DERRANTCM
  • 2015年07月22日 07:26
  • 2768

leetcode 地铁看题

1.  5.Longest Palindromic Substring Given astring s, find the longest palindromic substring in s.Yo...
  • m0_37693059
  • m0_37693059
  • 2017年08月03日 23:53
  • 211

【LeetCode】- Valid Parentheses(有效的括号)

[ 问题: ] Given a string containing just the characters '(', ')', '{', '}', '[' and ']', determine if ...
  • zdp072
  • zdp072
  • 2014年08月29日 14:49
  • 850

Valid Parentheses (栈的符号匹配)

很简单的利用栈进行括号匹配的题目。 当是左边的符号的时候,压进栈中。发现是右边的符号的时候,先判断其是否为空,然后与栈顶元素比较,不等直接return false 注意一点就是 最后只有栈中为空的...
  • NK_test
  • NK_test
  • 2015年07月12日 22:28
  • 982

每日算法之十九:Valid Parentheses

这个就是查看括号是否是匹配的。使用STL中的stack是容易实现的。代码如下:...
  • yapian8
  • yapian8
  • 2014年05月26日 15:53
  • 664

每日算法之二十八:Longest Valid Parentheses

求最长合法匹配的长度,这道题可以用一维动态规划逆向求解。假设输入括号表达式为String s,维护一个长度为s.length的一维数组dp[],数组元素初始化为0。 dp[i]表示从s[i]到s[s....
  • yapian8
  • yapian8
  • 2014年06月03日 11:08
  • 1113

Longest Valid Parentheses(最长有效括号串)

Given a string containing just the characters ‘(’ and ‘)’, find the length of the longest valid (wel...
  • ylifam
  • ylifam
  • 2017年03月14日 00:18
  • 96

每日一道算法题——Longest Valid Parentheses

最长合法圆括号题目Given a string containing just the characters ‘(’ and ‘)’, find the length of the longest v...
  • q1242027878
  • q1242027878
  • 2017年02月14日 11:17
  • 215

和大神们学习每天一题(leetcode)-Valid Parentheses

Given a string containing just the characters '(', ')', '{', '}', '[' and ']', determine if the in...
  • majunyangyang
  • majunyangyang
  • 2014年12月07日 16:00
  • 181

Longest valid Parentheses(括号匹配长度问题)

原文地址:https://leetcode.com/problems/longest-valid-parentheses/ 题意: Given a string containing just...
  • patkritLee
  • patkritLee
  • 2016年09月24日 15:44
  • 222
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:LeetCode20:Valid Parentheses
举报原因:
原因补充:

(最多只允许输入30个字)