判断括号是否匹配:
给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串,判断字符串是否有效。
有效字符串需满足:
左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
第一版:普通做法
import java.util.*;
public class Solution {
/**
* 判断是否满足条件
* @param s string字符串 字符串s
* @return bool布尔型
*/
public boolean isValid (String s) {
// write code here
char[] chars = s.toCharArray();
LinkedList<Character> stack = new LinkedList<>();
for (int i = 0; i < chars.length; i++) {
//左括号进栈
switch (chars[i]) {
case '{':
case '[':
case '(':
stack.push(chars[i]);
break;
//如果是右括号,左括号出栈,和右括号比较
default:
if (!stack.isEmpty()) {
char tmp = stack.pop();
//如果不匹配,返回true
if(!((tmp=='(' &&chars[i]==')')||(tmp=='[' &&chars[i]==']')||(tmp=='{' &&chars[i]=='}'))){
return false;
}
} else {
return false;
}
break;
}
}
return true;
}
}
改进:用hashMap存储一对括号
class Solution {
public:
/**
* 判断是否满足条件
* @param s string字符串 字符串s
* @return bool布尔型
*/
bool isValid(string s) {
// write code here
if(s.size()%2) {return false;}
map<char, char> hashMap =
{
{'}', '{'},
{']', '['},
{')', '('}
};
stack<char> st;
for(auto i:s)
{
if(hashMap.count(i))
{
if(st.empty()||st.top()!=hashMap[i]) {return false;}
else st.pop();
}
else {st.push(i);}
}
return true;
}
};