括号序列
题目描述:
给出一个仅包含字符’(’,’)’,’{’,’}’,’[‘和’]’,的字符串,判断给出的字符串是否是合法的括号序列
括号必须以正确的顺序关闭,"()“和”()[]{}“都是合法的括号序列,但”(]“和”([)]"不合法。
题目链接:
https://www.nowcoder.com/practice/37548e94a270412c8b9fb85643c8ccc2?tpId=194&&tqId=35784&rp=1&ru=/ta/job-code-high-client&qru=/ta/job-code-high-client/question-ranking
思路:
括号匹配问题先想到用栈来解决问题。
- 先将字符串转换为字符类型数组,用toCharArray()方法。
- 遍历数组
- 如果遇到( ,[ 和 { 就将对应的右括号入栈,如果遇到的是),] 和 } 就把栈中元素pop()出来与之比较,若此时栈中无元素或者两元素不相等就放回false。
- 遍历完字符数组后,如果栈中无元素就放回true,否则返回false。
代码:
import java.util.*;
public class Solution {
/**
*
* @param s string字符串
* @return bool布尔型
*/
public boolean isValid (String s) {
// write code here
Stack<Character> stack = new Stack<>();
char[] chars = s.toCharArray();
for (int i = 0; i < chars.length; i++) {
if (chars[i] == '(') {
stack.push(')');
}
else if (chars[i] == '[') {
stack.push(']');
}
else if (chars[i] == '{') {
stack.push('}');
}
else if (stack.isEmpty() || chars[i] != stack.pop()) {
return false;
}
}
return stack.isEmpty();
}
}