1.题目说明:
给定一个只包括 '('
,')'
,'{'
,'}'
,'['
,']'
的字符串 s
,判断字符串是否有效。
有效字符串需满足:
- 左括号必须用相同类型的右括号闭合。
- 左括号必须以正确的顺序闭合。
- 每个右括号都有一个对应的相同类型的左括号。
-
示例 2:
输入:s = "()[]{}"
输出:true
解题思路:
如何将类型相同的括号建立起联系?这里我们需要用到栈的知识。
创建一个栈,通过for循环从头遍历string,用ch来接收字符元素,如果每次循环的字符 == 左侧括号 '(' '{' '[', 则将这些元素依次压入栈中,同时ch继续向右继续遍历得到右侧括号。
此时,创建字符ch2 通过peek方法取得栈顶元素,如果循环过程中 ch == ch2 ,符合题意,即可返回true。
2不符合题目的情况情况:
1.括号顺序不符合
2.左侧括号偏多
3.右括号多
3.具体代码如下:
import java.util.*;
class solution{public boolean isVaild(String s){Stack<Character> stack = new Stack<>();for (int i = 0; i < s.length() ; i++) {char ch = s.charAt(i);if(ch == '(' || ch == '[' || ch == '{'){stack.push(ch);}else{if(stack.isEmpty()){return false;}}//判断后续括号是否匹配char ch2 = stack.peek(); //获取此时栈顶元素if(ch2 == '(' && ch == ')' || ch2 == '['&& ch ==']' || ch2=='{' && ch =='}' ){stack.pop();}else{return false;}}if(!stack.isEmpty()){return false;}return true;
}
今天的分享就到这里了,喜欢的老铁来个三连吧