题解 | #合法的括号字符串#

合法的括号字符串

https://www.nowcoder.com/practice/eceb50e041ec40bd93240b8b3b62d221

import java.util.*;

/**
 * NC175 合法的括号字符串
 * @author d3y1
 */
public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     *
     * @param s string字符串
     * @return bool布尔型
     */
    public boolean isValidString (String s) {
        return solution1(s);
        // return solution2(s);
    }

    /**
     * 栈
     * @param s
     * @return
     */
    private boolean solution1(String s){
        Stack<Integer> leftStack = new Stack<>();
        Stack<Integer> starStack = new Stack<>();

        for(int i=0; i<s.length(); i++){
            if(s.charAt(i) == '('){
                leftStack.push(i);
            }
            if(s.charAt(i) == '*'){
                starStack.push(i);
            }
            if(s.charAt(i) == ')'){
                if(!leftStack.isEmpty()){
                    leftStack.pop();
                }else if(!starStack.isEmpty()){
                    starStack.pop();
                }else{
                    return false;
                }
            }
        }

        while(!leftStack.isEmpty()){
            if(!starStack.isEmpty() && leftStack.peek()<starStack.peek()){
                leftStack.pop();
                starStack.pop();
            }else{
                return false;
            }
        }

        return true;
    }

    /**
     * 贪心
     * @param s
     * @return
     */
    private boolean solution2(String s){
        // 待消除左括号的最小个数
        int minLeft = 0;
        // 待消除左括号的最大个数
        int maxLeft = 0;

        for(char ch: s.toCharArray()){
            if(ch == '('){
                minLeft++;
                maxLeft++;
            }
            if(ch == '*'){
                // * -> )
                if(minLeft > 0){
                    minLeft--;
                }
                // * -> (
                maxLeft++;
            }
            if(ch == ')'){
                if(minLeft > 0){
                    minLeft--;
                }
                // 已经没有'('或'*'与当前')'匹配
                if(maxLeft == 0){
                    return false;
                }
                maxLeft--;
            }
        }

        return minLeft==0;
    }
}

全部评论

相关推荐

#96年28岁其实挺小的#还没到28岁,不过也快了。没想到时间过得这么快,遥想大学毕业时我才23岁,读了个研,26了大学时我是一个风风火火的人,有想法&nbsp;有干劲&nbsp;有活力的人,觉得未来充满无限可能。我参加了很多的活动,也亲自作为负责人举办了全校规模的比赛,我体验了非常多不一样的事情,曾一度在一个星期内走遍了学校所有的男生宿舍去推销宣传产品,去校外拉赞助,谈''合作''&nbsp;锻炼了自己的口才,增长了自己的见识。现在想想,这些事好多都挺幼稚。但那个时候是我火一般的岁月,每天都充满激情。大学时不爱上课,所以文化课学的不怎么样,当时对这件事有遗憾,我没有高中时静心学习的能力了。后来,我想静...
大祥老师永远的0:徐霞客那一章作为七本书的尾声确实点睛之笔。 打开书时,个人的命运令我扼腕,王侯将相的事迹令我心潮澎湃,王朝的兴衰令我哀叹。 合上书后,最受用的还是最后一句话,幡然醒悟过来这些早已是过往云烟,你对它们扼腕、澎湃、哀叹其实轻于鸿毛,正如作者所言“先变成粪,后变成土”,用喜欢的方式度过自己的一生未必就不比书中的一个个名留青史的历史人物活得风采。
点赞 评论 收藏
分享
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务