タイトル:'('、 ')'、 '{'、 '}'、 '['、 ']'のみを含む文字列を指定して、その文字列が有効かどうかを判断します。
有効な文字列は次の条件を満たす
必要があります。左括弧は同じタイプの右括弧で閉じる必要があります。
開き括弧は正しい順序で閉じる必要があります。
空の文字列は有効な文字列と見なすことができることに注意してください。
ソース:LeetCode
リンク:https ://leetcode-cn.com/problems/valid-parentheses
著作権はLeetCodeが所有しています。商用の再版については、公式の承認に連絡してください。非商用の再版については、出典を示してください。
アイデア:左括弧を配列内の文字列に格納します。最初の右括弧が見つかったら、左括弧配列が空かどうかを判断します。空でない場合は、配列内の最後の左括弧と比較して、配列かどうかを確認します。一致します。削除して「\ 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;
}