思路分析
题目匹配的情况有两中:(){}[]和([{}]),匹配成功的思路是每个]或者其他右包围结构都是和最近的[或者其他左包围结构匹配.
“最近”匹配的思想应该使用stack
结构对数据进行操作
代码框架
1.遍历整个string
for( int i = 0 ; i < s.size() ; i ++ ){}
2.对于灭一个元素,有两类性质:被判断的属性和判断的属性,被判断的元素应该存入stack
,判断的元素应该作为局部变量
2.1遍历每一个元素:stack存入判断元素(被判别的属性)
if( s[i] == '(' || s[i] == '{' || s[i] == '[')
stack.push(s[i]);
2.2遍历每一个元素:(判别属性)
char c = stack.top();
stack.pop();
char match;
if( s[i] == ')' )
match = '(';
else if( s[i] == ']' )
match = '[';
else{
assert( s[i] == '}' );
match = '{';
}
if(c != match)
return false;
整体代码
class Solution {
public:
bool isValid(string s) {
stack<char> stack;
for( int i = 0 ; i < s.size() ; i ++ ){
if( s[i] == '(' || s[i] == '{' || s[i] == '[')
stack.push(s[i]);
else{
if( stack.size() == 0 )
return false;
char c = stack.top();
stack.pop();
char match;
if( s[i] == ')' )
match = '(';
else if( s[i] == ']' )
match = '[';
else{
if(s[i]=='}')
match = '{';
}
if(c != match)
return false;
}
}
if( stack.size() != 0 )
return false;
return true;
}
};
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)