【无标题】

 一 。括号匹配(含*号)

bool checkValidString(char * s){

    int i = 0  , ri = 0 ;char a[11111];

    for(; *(s + i) != '\0' ; i++){

        if(*(s + i) == '{' || *(s + i) == '[' || *(s + i) == '<' || *(s + i) == '(' || *(s + i )== '*'){

            a[ri ++] = *(s + i);

        }

        else if(*(s + i) == '}'&&ri != 0){

            int o = 0 , q = ri ;

            while(q > 0 &&*(a + q - 1) == '*'){

                o ++;

                q --;

            }

            if(q != 0 && *(a + q - 1) == '{'){

                while(o != 0){

                    a[q - 1] = '*';

                    q ++;

                    o --;

                }

                ri -- ;

            }

            else if(*(a + ri - 1) == '*'){

                ri -- ;

            }

            else return 0;

        }

         else if(*(s + i) == '>'&&ri != 0){

            int o = 0 , q = ri ;

            while(q > 0 &&*(a + q - 1) == '*'){

                o ++;

                q --;

            }

            if(q != 0&&*(a + q - 1) == '<'){

                while(o != 0){

                    a[q - 1] = '*';

                    q ++;

                    o --;

                }

                ri -- ;

            }

            else if(*(s + ri - 1) == '*'){

                ri -- ;

            }

            else return 0;

        }

        else if(*(s + i) == ')'&&ri != 0){

            int o = 0 , q = ri ;//ri =2 = q

            while(q > 0 &&*(a + q - 1) == '*' ){

                o ++;//0 = 1,

                q --;//q = 1,

            }

            if( q!= 0&&*(a + q - 1) == '('){

                while(o != 0){

                    a[q - 1] = '*';//s[0] = *

                    

                    q ++;//q = 2

                    o --;//o = 0

                }

                ri -- ;//ri = 1

            }

            else if(*(a + ri - 1) == '*'){

                ri -- ;

            }

            else return 0;

        }

        else if(*(s + i) == ']'&&ri != 0){

            int o = 0 , q = ri ;

            while(q > 0 &&*(a + q - 1) == '*' ){

                o ++;

                q --;

            }

            if(q != 0&&*(a + q - 1) == '['){

                while(o != 0){

                    a[q - 1] = '*';

                    q ++;

                    o --;

                }

                ri -- ;

            }

            else if(*(a + ri - 1) == '*'){

                ri -- ;

            }

            else return false;

        }

        else return false;

        

    }

 int z = 0 , hh = 0;

        while(z < ri ){

            hh = 1;

            if(a[z] == '(') {

                hh = 0;

                for(int j = z + 1 ; j < ri ; j ++){

                    if(a[j] == '*') {

                        a[j] = 'o';

                        hh = 1;

                        break;

                    }

                }

            }

            if(hh == 0) return 0;

            z ++ ;

        }

       return 1;

}

 记录下自己的血泪史还是蛮有趣的,力扣还是蛮严谨的。遇到了执行错误。是因为越界,要先判断数组存不存在,然后再判断这个数组满不满足要求(本地编译器根本不报)。如果数组判断完以后没有Return。就数组里面就只剩下左括号和星号或者其中的一种。我当时就觉得只要*号大于左括号个数就可以。但星号还可以在左括号前面。这样就构不成一对括号。在判断是不是左括号右面都有星号的时候。也有一点点问题。一是标记的方法。二就是可能会越界。1.标记方法

2.j是否越界

 

 二 。 报数杀人问题

遗留问题。想法就没变过,就弄俩标志计数,第一个计数是人数,第二个是报数值 ,当人没被杀时:人数++(注意可以直接取余+1,也可>总人数时使其等于1),报数值++(同人数);当报数值==题目所给,即杀人(标记);就这个想法,代码实现却有些复杂

根据别人改进的代码 

 就在于使用两个循环使其看起来更简洁,还有就是先判断是否被杀,再加值。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值