还是遍历所有情况, 深度优先遍历
1 #include<iostream> 2 #include<string> 3 #include<vector> 4 5 using namespace std; 6 7 int dfs(vector<char> &input, vector<char> &target, 8 vector<char> &output, vector<char> &order) 9 { 10 if (!input.empty())//input不为空可以出栈 11 { 12 //弹出 13 output.push_back('i'); 14 order.push_back(input.back()); 15 input.pop_back(); 16 17 dfs(input, target, output, order); 18 19 //恢复 20 input.push_back(order.back()); 21 order.pop_back(); 22 output.pop_back(); 23 } 24 if (!order.empty()&&order.back()==target.back()) 25 { 26 //弹出 27 output.push_back('o'); 28 char ch = order.back(); 29 order.pop_back(); 30 target.pop_back(); 31 32 dfs(input, target, output, order); 33 34 //恢复 35 target.push_back(ch); 36 order.push_back(ch); 37 output.pop_back(); 38 } 39 40 //target为空,说明匹配成功 41 if (target.empty()) 42 { 43 for (vector<char>::iterator it = output.begin(); it != output.end(); it++) 44 { 45 cout << *it << " "; 46 } 47 cout << endl; 48 } 49 50 return 0; 51 } 52 53 int main() 54 { 55 for (string s1, s2; cin >> s1, cin >> s2; cout << "]" << endl) 56 { 57 cout << "[" << endl; 58 //input第一个输入 target目标 order存储input弹出,最终与target相同 output存储'i' 'o' 59 vector<char> input(s1.rbegin(), s1.rend());//反向rbegin() rend(),正向begin() end() 60 vector<char> target(s2.rbegin(), s2.rend());//反向存储,可以对target首字母操作 61 vector<char> output, order; 62 63 dfs(input, target, output, order); 64 } 65 //system("pause"); 66 }