JavaInterview JavaInterview
首页
指南
分类
标签
归档
  • CSDN (opens new window)
  • 文档集合 (opens new window)
  • 系统架构 (opens new window)
  • 微信号 (opens new window)
  • 公众号 (opens new window)

『Java面试+Java学习』
首页
指南
分类
标签
归档
  • CSDN (opens new window)
  • 文档集合 (opens new window)
  • 系统架构 (opens new window)
  • 微信号 (opens new window)
  • 公众号 (opens new window)
  • 指南
  • 简历

  • Java

  • 面试

  • 算法

  • algorithm
  • leetcode
JavaInterview.cn
2022-09-20
目录

有效的括号字符串Java

文章发布较早,内容可能过时,阅读注意甄别。

# 题目

给定一个只包含三种字符的字符串:( ,) 和 *,写一个函数来检验这个字符串是否为有效字符串。有效字符串具有如下规则:

  • 任何左括号 ( 必须有相应的右括号 )。
  • 任何右括号 ) 必须有相应的左括号 ( 。
  • 左括号 ( 必须在对应的右括号之前 )。
  • * 可以被视为单个右括号 ) ,或单个左括号 ( ,或一个空字符串。
  • 一个空字符串也被视为有效字符串。

示例 1:

输入: "()"
输出: True

示例 2:

输入: "(*)"
输出: True

示例 3:

输入: "(*))"
输出: True

注意:

  • 字符串大小将在 [1,100] 范围内。

# 思路

两个栈分别将"("和"*"的序号压入栈中,每次遇到右括号,首先检测左括号栈中是否为空,不为空则弹出元素,否则弹出star栈,

最后考虑left和star栈可能存在元素,判断此时栈中元素的序号大小,如果left栈中的序号大于star中的则表明 存在"*("此种情况,直接false

# 解法


class Solution {
    public boolean checkValidString(String str) {
        char[] s= str.toCharArray();
        Stack<Integer> left = new Stack<>();
        Stack<Integer> star = new Stack<>();        
        for(int i=0;i<s.length;i++){
            if(s[i]=='(') left.add(i);
            else if(s[i]=='*') star.add(i);
            else {
                if(left.empty() && star.empty()) return false;
                if(!left.empty()) left.pop();
                else 
                    star.pop();
            }            

        }
 
         while(!left.empty() && !star.empty()){
            if(left.peek()>star.peek()) return false;
            left.pop();
            star.pop();
        }
        return left.empty();
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26

# 总结

  • 分析出几种情况,然后分别对各个情况实现
微信 支付宝
最近更新
01
1686. 石子游戏VI Java
08-18
02
1688. 比赛中的配对次数 Java
08-18
03
1687. 从仓库到码头运输箱子 Java
08-18
更多文章>
Theme by Vdoing | Copyright © 2019-2025 JavaInterview.cn
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式