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 }