问前两个字符串是否能组合成第三个字符串,保持原字符串的顺序。

看到别人的代码有两种做法:

 

1、DFS

hash数组标记足迹,可以减少重复搜索的次数。

这个代码太过巧妙,体会体会再体会。。

 1 //#define LOCAL
 2 #include <iostream>
 3 #include <cstdio>
 4 #include <cstring>
 5 using namespace std;
 6 
 7 bool hash[205][205];
 8 char s1[205], s2[205], s3[410];
 9 
10 bool DFS(int a, int b, int c)
11 {
12     if(s3[c] == '\0')
13         return true;
14     if(hash[a][b])
15         return false;
16     hash[a][b] = true;
17     if(s1[a] == s3[c] && DFS(a+1, b, c+1))
18         return true;
19     if(s2[b] == s3[c] && DFS(a, b+1, c+1))
20         return true;
21     return false;
22 }
23 
24 int main(void)
25 {
26     #ifdef LOCAL
27         freopen("1501in.txt", "r", stdin);
28     #endif
29 
30     int T, kase;
31     scanf("%d", &T);
32     for(kase = 1; kase <= T; ++kase)
33     {
34         printf("Data set %d: ", kase);
35         cin >> s1 >> s2 >> s3;
36         memset(hash, false, sizeof(hash));
37         if(DFS(0, 0, 0))
38             printf("yes\n");
39         else
40             printf("no\n");
41 
42     }
43     return 0;
44 }
代码君

相关文章:

  • 2021-12-31
  • 2021-07-27
  • 2021-11-01
  • 2021-12-04
  • 2022-12-23
  • 2021-06-28
  • 2022-12-23
  • 2021-10-06
猜你喜欢
  • 2022-12-23
  • 2021-05-21
  • 2021-07-10
  • 2022-12-23
  • 2021-08-05
  • 2022-12-23
  • 2022-12-23
相关资源
相似解决方案