/**
* leetcode 20
* 有效的括号
*
* @date 2020-01-09
* @since
*/
public class EffectiveSuffixTest {
/**
* 括号 ( [ {
* 空字符串可被认为是有效字符串
* <p>
* 这里用到了栈的概念,对整个字符串进行遍历,当遇到左括号则加入到栈中
* 如果遇到右括号,则与当前栈顶的元素进行比较,如果可以形成闭空间,则出栈
* 如果不可以形成闭空间,代表当前表达式无效
*
* @param s
* @return
*/
public static boolean isValid(String s) {
if (s.length() == 0) {
return true;
}
if (s.length() % 2 != 0) {
return false;
}
List<Character> stacks = new LinkedList<>();
// 栈顶指针,用于指定栈顶元素
int head = 0;
// 遍历字符串的子针
int i = 0;
char[] chars = s.toCharArray();
Map<Character, Character> map = new HashMap<>(3);
map.put(')', '(');
map.put(']', '[');
map.put('}', '{');
while (i < s.length()) {
// 如果首位表示闭括号则直接返回false
if (!map.containsKey(chars[i])) {
stacks.add(chars[i]);
// 指定头指针
head = stacks.size() - 1;
i++;
} else {
if (i == 0) {
return false;
}
// 获取栈顶元素,自动拆箱
char headChar = stacks.get(head);
// 如果匹配可以成为闭合,则移除栈顶元素
if (headChar == map.get(chars[i])) {
stacks.remove(head);
head = stacks.size() - 1;
i++;
} else {
return false;
}
}
}
// 循环执行完,校验栈中是否还存在未处理的数据,存在则为false
return stacks.size() == 0;
}
public static void main(String[] args) {
System.out.println(isValid("(]"));
}
}
记录一下leetcode 20 有效的括号,基于栈来实现
猜你喜欢
转载自blog.csdn.net/qq_38796327/article/details/103930967
今日推荐
周排行