日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

UVA - 673 (括号的匹配)

發(fā)布時(shí)間:2025/6/15 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 UVA - 673 (括号的匹配) 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

有兩種方法:

第一種:數(shù)組

思想:觀察可匹配成功的字符串可知:

找到第一個(gè)i為出括號(hào)(')',']')那么與它相匹配的進(jìn)括號(hào)一定是在它左邊i-1(最近的)

如果不是第一個(gè)出括號(hào),與它相匹配的進(jìn)括號(hào)一定是在它左邊距離t對(duì)已匹配的括號(hào)(假設(shè)兩者相隔t對(duì)已匹配的括號(hào))可把已匹配的括號(hào)值設(shè)為0,那么只需找到第一個(gè)不為0的數(shù)是否與出括號(hào)匹配,如果不匹配說(shuō)明該字符串不匹配)

([]), (([()]))) ,([()[]()])()

1 #include<iostream> 2 #include<cstring> 3 #include<cstdio> 4 #include<stdio.h> 5 #include<string.h> 6 #include<stack> 7 using namespace std; 8 int main() 9 { 10 int n; 11 // freopen("D:\\in.txt","r",stdin); 12 // freopen("D:\\out.txt","w",stdout); 13 cin>>n; 14 getchar(); 15 while(n--){ 16 int s[130]; 17 char mys[130]; 18 cin.getline(mys,sizeof(mys)); 19 int flagh=0; 20 int x1=0,x2=0,x3=0,x4=0; 21 for(int i=0;i<strlen(mys);i++) 22 { 23 if(mys[i]=='(') 24 s[i]=1,x1++; 25 if(mys[i]==')') 26 s[i]=-1,x2++; 27 if(mys[i]=='[') 28 s[i]=2,x3++; 29 if(mys[i]==']') 30 s[i]=-2,x4++; 31 } 32 if(x1!=x2||x3!=x4)//說(shuō)明括號(hào)數(shù)量不匹配 33 flagh=1; 34 // for(int i=0;i<strlen(mys);i++) 35 // cout<<s[i]<<" "; 36 for(int i=0;i<strlen(mys);i++) 37 { 38 if(s[i]<0)//說(shuō)明它是')'或者是‘]' 39 { 40 int flag=1,j; 41 for(j=i-1;j>=0;j--)//找到第一個(gè)不為0的數(shù)(另一個(gè)匹配的括號(hào)) 42 { 43 if(s[j]==0) 44 continue; 45 else{ 46 if(s[i]+s[j]!=0)//說(shuō)明不匹配 47 { 48 flag=0; 49 } 50 break; 51 } 52 } 53 if(flag==0)//說(shuō)明不符合 54 { 55 flagh=1; 56 break; 57 } 58 else//說(shuō)明符合 把匹配的括號(hào)設(shè)為0 59 { 60 s[j]=0; 61 s[i]=0; 62 } 63 } 64 } 65 for(int i=0;i<strlen(mys);i++)//檢查是否存在沒(méi)匹配的字符(即不為0的數(shù)) 66 { 67 if(s[i]!=0) 68 { 69 flagh=1; 70 break; 71 } 72 } 73 // cout<<endl; 74 // for(int i=0;i<strlen(mys);i++) 75 // cout<<s[i]<<" "; 76 if(flagh==1) 77 cout<<"No"<<endl; 78 else 79 cout<<"Yes"<<endl; 80 } 81 // 82 //fclose(stdin); 83 //fclose(stdout); 84 }

?

第二種:棧

1)棧的思想

#include<stdio.h> #include<string.h> int main() {int i,j,k,T;int flag;int s[135],st,top;char c[135];scanf("%d",&T);getchar();while(T--){fgets(c,sizeof(c),stdin);flag=0;j=0;for(i=0; c[i]!='\n'; i++){if(c[i]=='(')s[j++]=0;else if(c[i]=='[')s[j++]=1;else if(c[i]==')'){if(j!=0 && s[j-1]==0)j--;else{flag=1;break;}}else if(c[i]==']'){if(j!=0 && s[j-1]==1)j--;else{flag=1;break;}} // else // { // flag=1; // break; // } }if(flag==1|| j!=0)printf("No\n");elseprintf("Yes\n");}return 0; }

?

轉(zhuǎn)載于:https://www.cnblogs.com/Aiahtwo/p/11067060.html

總結(jié)

以上是生活随笔為你收集整理的UVA - 673 (括号的匹配)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。