1203:扩号匹配问题

括号匹配问题

做的时候脑袋虽然晕乎乎的,但心里就是想用一个函数借助递归思想完成该题(不借助主函数)

当然最终结果看似是达到这个要求了(*^▽^*)。

关于这种解法的解释就不说了,毕竟没有实用性!

 1 #include<iostream>
 2 #include<cstring>
 3 using namespace std;
 4 
 5 string s;
 6 int matchBracket(int pre_index,int next){
 7     int index=next;
 8     while(index<s.length()&&s[index]!='('&&(s[index]!=')'||(s[index]==')'&&pre_index<0))){
 9         char c=' ';
10         if(s[index]==')')c='?';
11         s[index++]=c;
12     }
13     if(index<s.length()){
14         if(s[index]==')'){
15             s[index]=s[pre_index]=' ';
16             return index+1;
17         }
18         if(s[index]=='('){
19             s[index]='$';
20             int ret=matchBracket(index,index+1);
21             if(ret<s.length())return matchBracket(pre_index,ret);
22         }
23     }
24     return s.length();
25 }
26 int main(){
27     while(cin>>s){
28         cout<<s<<endl;
29         matchBracket(-1,0);
30         //打印输出
31         cout<<s<<endl;
32     }
33     return 0;
34 }

 

用栈的思想来做这题非常简单!(我就不去敲一遍了(ꈍᴗꈍ))

具体可参考https://blog.csdn.net/u011815404/article/details/80275408(直接使用STL)

https://blog.csdn.net/lybc2019/article/details/104147232(这位大佬的第二种解法也是运用了栈的思想)


 

第二种递归解法(来自上面的大佬

 1 #include<iostream>
 2 #include<cstring>
 3 using namespace std;
 4 
 5 string s;
 6 bool matchBracket(int index){
 7     if(index<0)return 0;
 8     if(s[index]=='$'){
 9         s[index]=' ';
10         return 1;
11     }
12     else matchBracket(index-1);
13 }
14 int main(){
15     while(cin>>s){
16         cout<<s<<endl;
17         for(int i=0;i<s.length();i++){
18             if(s[i]=='(')s[i]='$';
19             else if(s[i]==')'&&!matchBracket(i-1))s[i]='?';
20             else s[i]=' ';
21         }
22         //打印输出
23         cout<<s<<endl;
24     }
25     return 0;
26 }

 

posted @ 2021-08-04 16:58  Rekord  阅读(748)  评论(0编辑  收藏  举报