学习目标:算法学习-Day6
题库:力扣
每天保持发布一篇Java或c算法题解!
题目:
给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串 s ,判断字符串是否有效。
有效字符串需满足:
左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/valid-parentheses。
输入格式:
输出格式:
样例 1 :
输入:
输入:s = “()”
输出:
输出:true
样例 2 :
输入:
输入:s = “()[]{}”
输出:
输出:true
样例3:
输入:s = “([)]”
输出:false
思路:
匹配符号就用到了栈。
Java中有Stack类。
用栈的方法即可解题
将左括号首先放入栈内,随后右括号与栈顶一一匹配,
成功则true,否则返回false
习题总结及反思:
push() 入栈
pop() 出栈
peek() 查看当前栈顶的元素
isEmpty() 当且仅当栈内没有元素 默认返回true
代码如下:
import java.util.*;
public class Main {
boolean isValid(String s) {
//创建栈
Stack<Character> stack = new Stack<>();
//循环遍历每个字符
for (int i = 0; i < s.length(); i++) {
//将字符串变为字符
char c = s.charAt(i);
//如果是左括号, 就入栈
if (c == '(' || c == '[' || c == '{') {
stack.push(c);
continue;
}
// 不匹配的情况
if (stack.isEmpty()) {
return false;
}
//如果是右括号, 取出栈顶元素
char top = stack.pop();
//检查栈顶元素和当前元素是不是配对的
if (top == '(' && c == ')') {
continue;
}
if (top == '[' && c == ']') {
continue;
}
if (top == '{' && c == '}') {
continue;
}
// 如果代码走到这, 说明三种合法情况都不满足, 就是非法字符串
return false;
}
//栈内没有元素
if (stack.isEmpty()) {
return true;
}
return false;
}
public static void main(String args[]) {
Main a = new Main();
System.out.println(a.isValid("()"));
}
}