Leetcode——678. Valid Parenthesis String(匹配括号)

题目原址

https://leetcode.com/problems/valid-parenthesis-string/description/

题目描述

给定一个字符串,字符串中可以有(、)、*左括号,有括号和星号,星号可以表示左括号或右括号或空字符。返回该字符串是否可以左右括号完全匹配。

AC代码

示例一: 递归

class Solution {
    public boolean checkValidString(String s) {
        if(s == null) return true;
        return isValid(s, 0, 0);
    }

    private boolean isValid(String s, int index, int count) {
        if(count < 0)
            return false;
        for(int i = index; i < s.length(); i++) {
            if(s.charAt(i) == '(')
                count ++;
            else if(s.charAt(i) == ')')
                if(count <= 0) return false;
                else count--;
            else if(s.charAt(i) == '*') 
                return isValid(s, i + 1, count + 1) || isValid(s, i + 1, count) || isValid(s, i + 1, count -1);
        }
        return count == 0;        
    }
}

示例二:这个方法真的太神奇了

class Solution {        
    public boolean checkValidString(String s) {         
        int l = 0;      
        int r = 0;
        for(char c: s.toCharArray()) {
            l = c == '(' ? 1: -1;
            r = c == ')' ? -1 : 1;
            if(r < 0) return false;
            l = Math.max(l, 0);
        }
        return lo == 0;
    }
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值