ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

【无标题】

2022-01-11 23:59:50  阅读:137  来源: 互联网

标签:-- 无标题 else ++ while && ri


 一 。括号匹配(含*号)

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),报数值++(同人数);当报数值==题目所给,即杀人(标记);就这个想法,代码实现却有些复杂

根据别人改进的代码 

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

标签:--,无标题,else,++,while,&&,ri
来源: https://blog.csdn.net/csdn1357911/article/details/122436356

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有