Q678 有效的括号字符串

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

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

示例 1:

输入: "()"
输出: True

示例 2:

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

示例 3:

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

注意:

  1. 字符串大小将在 [1,100] 范围内。
public boolean checkValidString(String s) {
        if (s == null || s.length() == 0)
            return true;

        char[] chs = s.toCharArray();
        char[] chsReverse = s.toCharArray();
        for (int i = 0; i < chsReverse.length / 2; i++) {
            char c = chsReverse[i];
            if (chsReverse[chsReverse.length - 1 - i] == ‘*‘)
                chsReverse[i] = ‘*‘;
            else
                chsReverse[i] = (chsReverse[chsReverse.length - 1 - i] == ‘)‘ ? ‘(‘ : ‘)‘);

            if (c == ‘*‘)
                chsReverse[chsReverse.length - 1 - i] = ‘*‘;
            else
                chsReverse[chsReverse.length - 1 - i] = (c == ‘)‘ ? ‘(‘ : ‘)‘);
        }

        return check(chs) && check(chsReverse);
    }

    private boolean check(char[] s) {

        int left = 0;
        int right = 0;
        int nil = 0;

        for (char c : s) {
            if (c == ‘*‘)
                nil++;
            else if (c == ‘(‘)
                left++;
            else if (c == ‘)‘)
                right++;

            if (right - left > nil )
                return false;
        }

        if (left + nil < right || right + nil < left)
            return false;

        return true;
    }

原文地址:https://www.cnblogs.com/WeichengDDD/p/10739220.html

时间: 2024-11-13 09:55:29

Q678 有效的括号字符串的相关文章

Leetcode 678.有效的括号字符串

有效的括号字符串 给定一个只包含三种字符的字符串:( ,) 和 *,写一个函数来检验这个字符串是否为有效字符串.有效字符串具有如下规则: 任何左括号 ( 必须有相应的右括号 ). 任何右括号 ) 必须有相应的左括号 ( . 左括号 ( 必须在对应的右括号之前 ). * 可以被视为单个右括号 ) ,或单个左括号 ( ,或一个空字符串. 一个空字符串也被视为有效字符串. 示例 1: 输入: "()" 输出: True 示例 2: 输入: "(*)" 输出: True 示

LeetCode 678. Valid Parenthesis String 有效的括号字符串 (C++/Java)

题目: Given a string containing only three types of characters: '(', ')' and '*', write a function to check whether this string is valid. We define the validity of a string by these rules: Any left parenthesis '(' must have a corresponding right parent

536. Construct Binary Tree from String 从括号字符串中构建二叉树

[抄题]: You need to construct a binary tree from a string consisting of parenthesis and integers. The whole input represents a binary tree. It contains an integer followed by zero, one or two pairs of parenthesis. The integer represents the root's valu

【sqli-labs】 less28 GET- Error based -All you Union&amp;Select Belong to us -String -Single quote with parenthesis(GET型基于错误的去除了Union和Select的单引号带括号字符串型注入)

这个不是基于错误的吧,看源码可以知道错误并没有输出 那就使用;%00和order by试一下 http://192.168.136.128/sqli-labs-master/Less-28/?id=1')%a0order%a0by%a03;%00 http://192.168.136.128/sqli-labs-master/Less-28/?id=1')%a0order%a0by%a04;%00 http://192.168.136.128/sqli-labs-master/Less-28/?

LongestValidParentheses, 求最长合法括号子串长度-----同类问题ValidParentheses,GenerateParentheses

问题描述:求括号字符串中最长合法子串长度.例如:()((),返回2,而不是4. 算法分析:还是利用栈,和判断合法括号对是一样的. 1 public static int longestValidParentheses(String s) { 2 Stack<int[]> stack = new Stack<int[]>(); 3 int result = 0; 4 5 for(int i=0; i<=s.length()-1; i++) 6 { 7 char c = s.ch

Brackets Sequence 括号DP

Brackets Sequence 题目抽象:给你一个括号字符串,要求你加入最好的括号使得括号匹配.输入匹配后的括号字符串. 分析:由已知的子区间推出大的区间. cnt[i][j]表示原字符串[i,j]中至少需要加入的括号数.  ans[i][j]存储原字符串[i,j]匹配后的字符串. 特别注意输入的是空字符串.空字符串是匹配的字符串. 1 import java.util.*; 2 import java.io.*; 3 import java.math.*; 4 5 public class

POJ 之 Parencodings (类似括号的处理问题)

Parencodings Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 19550   Accepted: 11804 Description Let S = s1 s2...s2n be a well-formed string of parentheses. S can be encoded in two different ways: q By an integer sequence P = p1 p2...pn

NYOJ15|括号匹配(二)|区间DP|Elena

括号匹配(二) 时间限制:1000 ms  |  内存限制:65535 KB 难度:6 描述 给你一个字符串,里面只包含"(",")","[","]"四种符号,请问你需要至少添加多少个括号才能使这些括号匹配起来. 如:[]是匹配的([])[]是匹配的((]是不匹配的([)]是不匹配的 输入 第一行输入一个正整数N,表示测试数据组数(N<=10)每组测试数据都只有一行,是一个字符串S,S中只包含以上所说的四种字符,S的长度

[LeetCode] Valid Parentheses 验证括号

Given a string containing just the characters '(', ')', '{', '}', '[' and ']', determine if the input string is valid. The brackets must close in the correct order, "()" and "()[]{}" are all valid but "(]" and "([)]"