题目大意:
给你两个字符串,问:第一个字符串按入栈出栈规则,能否达到第二个字符串,输出所有的方法,i表示入栈,o表示出栈。
解题思路:DFS(深度优先搜索)
注意事项:
1、要注意回溯
2、要理清思路

View Code
1 #include <iostream> 2 #include <stdlib.h> 3 #include <memory.h> 4 5 using namespace std; 6 char op[110]; 7 char ch1[110],ch2[110]; 8 char st1[110]; 9 int len,k; 10 11 void dfs(int top1,int top2,int n){ 12 char t; 13 if(top2 == len){ 14 for(int i=0;i<k;i++){ 15 printf("%c ",op[i]); 16 } 17 printf("\n"); 18 return; 19 } 20 if(n<len){ 21 t = st1[top1+1]; 22 st1[top1+1] = ch1[n]; 23 op[k++] = 'i'; 24 dfs(top1+1,top2,n+1); 25 k--; 26 st1[top1+1] = t; 27 } 28 if(st1[top1] == ch2[top2]){ 29 op[k++] = 'o'; 30 dfs(top1-1,top2+1,n); 31 k--; 32 } 33 } 34 35 int main(){ 36 while(~scanf("%s%s",ch1,ch2)){ 37 k=0; 38 len = strlen(ch1); 39 memset(st1,0,sizeof(st1)); 40 printf("[\n"); 41 dfs(0,0,0); 42 printf("]\n"); 43 } 44 return 0; 45 }
总结:
对于能用深搜的题目,我们要分清楚当前所有的选择,并对当前所有的选择都要进行一次遍历,这样才能能将所有的情况都遍历一遍,寻找到最后的结果。
本文介绍了一种使用深度优先搜索(DFS)算法解决字符串匹配问题的方法,具体为判断一个字符串是否能通过入栈和出栈操作转换为另一个目标字符串。文章详细解释了算法的实现过程,包括如何通过递归调用进行回溯,以及如何确保所有可能的操作路径都被探索。此外,还提供了一份C++代码示例,帮助读者更好地理解算法的具体应用。

被折叠的 条评论
为什么被折叠?



