题意:
给你三个字符串,问你前两个能不能拼成第三个串。
思路:
给你三个字符串,问你前两个能不能拼成第三个串。
思路:
直接记忆化神搜就行,思路水,看下代码就知道了。这个题目我感觉最大公共子序列dp的作法是错的,虽然有人ac了,随便一组数据比如 abc abc abccba。
#include<stdio.h> #include<string.h> char c1[222] ,c2[222] ,c3[444]; int mark[222][222]; int ok ,l1 ,l2 ,l3; void DFS(int n1 ,int n2 ,int n3) { if(n3 == l3 + 1) { ok = 1; return ; } if(mark[n1][n2]) return; mark[n1][n2] = 1; if(n1 <= l1 && c3[n3] == c1[n1] && !ok) { DFS(n1 + 1 ,n2 ,n3 + 1); } if(n2 <= l2 && c3[n3] == c2[n2] && !ok) { DFS(n1 ,n2 + 1 ,n3 + 1); } } int main () { int t ,cas = 1; scanf("%d" ,&t); while(t--) { scanf("%s %s %s" ,c1 ,c2 ,c3); l1 = strlen(c1) - 1; l2 = strlen(c2) - 1; l3 = strlen(c3) - 1; if(l1 + 1 + l2 + 1 != l3 + 1) { printf("Data set %d: no\n" ,cas ++); continue; } ok = 0; memset(mark ,0 ,sizeof(mark)); DFS(0 ,0 ,0); if(ok) printf("Data set %d: yes\n" ,cas ++); else printf("Data set %d: no\n" ,cas ++); } return 0; }
本文介绍了一个简单的字符串匹配问题,并提供了一种通过深度搜索的方法来判断两个字符串能否组合成第三个字符串的有效解决方案。该方法利用了记忆化搜索技术,避免了重复计算,提高了搜索效率。
4万+

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



