该题目的要求是 判断str1和str2能否归并成为str3,递归的思路是正确的
bool
helper(string &str_x,string &str_y,int x,int y){ while(x<str_x.size()&&y<str_y.size()){ if(str_x[x]==str_y[y]){ ++x; ++y; } else{ return false; } } if(x==str_x.size()&&y==str_y.size()) return true; else return false; } bool helper(string &str1,string &str2,string &str3,int m,int n,int k){ if(m==str1.size()){ return helper(str2,str3,n,k); } else if(n==str2.size()){ return helper(str1,str3,m,k); } else if(k==str3.size()){ return false; } else { if(str1[m]==str3[k]&&str2[n]!=str3[k]) return helper(str1,str2,str3,m+1,n,k+1); else if(str1[m]!=str3[k]&&str2[n]==str3[k]) return helper(str1,str2,str3,m,n+1,k+1); else return helper(str1,str2,str3,m+1,n,k+1)||helper(str1,str2,str3,m,n+1,k+1); } } int main(){ int nums; cin>>nums; string str1,str2,str3; for(int i=0;i<nums;++i){ cin>>str1>>str2>>str3; int m=0,n=0,k=0;//m,n分别指向str1和str2的第0个元素 cout<<helper(str1,str2,str3,0,0,0)<<endl; } return 0; }

下面附上原来的错误代码
int main(){//str1:bcf str2:acde str3:abcdcef
    int nums;
    cin>>nums;
    string str1,str2,str3;
    for(int i=0;i<nums;++i){
        cin>>str1>>str2>>str3;
        int m=0,n=0,k=0;//m,n分别指向str1和str2的第0个元素
        bool flag=true;
        while(m<str1.size()&&n<str2.size()&&k<str3.size()){
            if(str1[m]==str3[k]){
                ++m;
                ++k;
            }
            else if(str2[n]==str3[k]){
                ++n;
                ++k;
            }
            else{
                flag=false;
                break;
            }        
        }
        while(m<str1.size()&&k<str3.size()){
            if(str1[m]==str3[k]){
                ++m;
                ++k;
            }
            else{
                flag=false;
                break;
            }    
        }
        while(n<str2.size()&&k<str3.size()){
            if(str2[n]==str3[k]){
                ++n;
                ++k;
            }
            else{
                flag=false;
                break;
            }    
        }

        if(m==str1.size()&&n==str2.size()&&k==str3.size())
            cout<<flag<<endl;
        else
            cout<<0<<endl;
    }
    return 0;
}