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;
}
今天的分享就到这里了,喜欢的老铁来个三连吧