阿里面试官问我:如何检验字符串是否有效,我给出接近满分的答案

本文介绍了2021年阿里面试中的一道真题,要求检查包含'(',')'和'*'的字符串是否有效。有效字符串需遵循特定规则,包括括号配对和'*'的使用。解题思路是通过维护必须被右括号匹配的左括号数量和组合中的左括号与星号数量,遍历字符串进行匹配。如果在匹配过程中出现不匹配或结束时仍有未配对的左括号,则字符串无效。

2021阿里面试真题:有效的括号字符串

描述
给定一个只包含三种类型字符的字符串:’(’,’)‘和 ‘*’, 编写一个函数来检查该字符串是否有效。 我们通过以下规则定义字符串的有效性:
1.任何左括号 ‘(‘必须有一个相应的右括号’)’。
2.任何右括号 ‘)’ 必须有一个相应的左括号’(’。
3.左括号’(’ 必须在相应的右括号 ‘)’ 之前。
4.*可以被视为单个右括号’)‘或单个左括号’('或空字符串。
5.空字符串也有效。

  1. 字符串的长度范围为 [1, 100]。

在线评测地址

样例1

输入:  "()"
        输出:  true

样例2

输入: "(*)"
        输出:  true
        
        解释:
        '*' 看作是空串.

样例3

输入: "(*))"
        输出: true
        
        解释:
        '*' 当作'('

解题思路

一道简单的思维题,考虑到星号在其中的用处就能解决. 1. 首先进行最基础的考虑,(在不考虑星号的情况下)我们必定会选择位置最接近的左右括号配对,这样避免了人为造成的右括号前面没有左括号匹配的惨剧。因此我们在写程序进行处理的时候,对于每个右括号判断前面是否有1个左括号能被他拥有,如果左括号数量不足,这个字符串必定是false,或者当整个串被匹配完之后发现有多余的左括号,这个字符串同样是fa

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值