首页 > 试题广场 >

合法的括号字符串

[编程题]合法的括号字符串
  • 热度指数:11986 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
给定一个字符串s,字符串s只包含以下三种字符: (,*,),请你判断 s是不是一个合法的括号字符串。合法括号字符串有如下规则:
1.左括号'('必须有对应的右括号')'
2.右括号')'必须有对应的左括号'('
3.左括号必须在对应的右括号前面
4.*可以视为单个左括号,也可以视为单个右括号,或者视为一个空字符
5.空字符串也视为合法的括号字符串

数据范围:

示例1

输入

"()()"

输出

true
示例2

输入

"((*)"

输出

true
示例3

输入

"(*)"

输出

true
示例4

输入

"(((*)"

输出

false
/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 *
 * @param s string字符串
 * @return bool布尔型
 */
bool isValidString(char* s ) {
    // write code here
    int a = strlen(s);
    int i, b = 0, c = 0, b1 = 0, c1 = 0;
    for(i = 0;i< a;i++)
    {
        if(*(s + i) == '(') b++;
        if(*(s + i) == ')') b--;
        if(*(s + i) == '*') c++;
        if((b + c) < 0) return false;
    }
    for(i = a-1;i>=0;i--)
    {
        if(*(s + i) == '(') b1--;
        if(*(s + i) == ')') b1++;
        if(*(s + i) == '*') c1++;
        if((b1 + c1) < 0) return false;
    }
    if(b < 0) b= -b;
    if(b == 0) return true;
    if(b <= c) return true;
    else return false;
}
发表于 2023-04-22 15:34:04 回复(0)