記録ブラシ問題--(leetcode-20有効かっこ)


タイトル:「(',')」,「{','}','[',']」のみを含む文字列を指定し、文字列が有効かどうかを判断します.有効な文字列は、左カッコと同じタイプの右カッコで閉じる必要があります.左かっこは正しい順序で閉じなければなりません.注意空の文字列は有効な文字列のソースと考えられます:力ボタン(LeetCode)リンク:https://leetcode-cn.com/problems/valid-parentheses著作権はインターネットの所有に帰属する.商業転載は公式の授権に連絡してください.非商業転載は出典を明記してください.構想:文字列の中の左かっこを1つの配列に存在し、最初の右かっこに出会ったときに左かっこ配列が空であるかどうかを判断し、空でない場合は配列の中の最後の左かっこと比較して一致するかどうかを判断し、一致は配列から削除して間もなく'0'に設定し、そうでない場合はループを退け、このとき配列は空ではない.最初の右括弧に遭遇したときに配列が空の場合、フラグの位置は1になり、不一致(無効な文字列)を意味します.最後にループを終了した後、左括弧配列の最初が空(’0’)でflag=0は文字列が有効であることを意味し、空の文字列も有効です.コード:
bool isValid(char * s){
    char *r;
    int le[10000]={'\0'},ri[10000]={'\0'};
    int i=0,j=0,k,n,flag=0;
    r=s;
    while(*r!='\0'){
        if(*r=='('||*r=='['||*r=='{'){
            ri[i]= *r;
            r++;
            i++;
//            printf("%d",i);
        }else if(*r==')'||*r==']'||*r=='}'){
          if(ri[0]!='\0')
           if((char)(ri[i-1]+1)==*r||(char)(ri[i-1]+2)==*r||(char)(ri[i-1]+2==*r)){
           	ri[i-1]='\0';
           	i--;
           	r++;
		   }else{
		   	break;
		   }
		   else{
		   	flag=1;
		   	break;
		   }
		   
        }
    }
	  if(ri[0]=='\0'&&flag==0||*s=='\0')
        return true;
    else
        return false;

}