如何检查一个字符串是否可以完全由'n'个其他字符串连接而成,其中'n'是一个变量?
例如:
catdogmice
由字符串cat
、dog
和mice
组成,但catdogmices
则不是。
Edit1:这是我写的一个代码(抱歉,我对编码没有基础,写了很糟糕的代码,它会导致段错误)
#include<stdio.h>
#include<string.h>
char words[1001][11];
char* str;
int flag;
void autopsy(char* str, int m)
{
if(strcmp(str,'\0')==0)
flag = 1;
int len, i;
for(i = 0; i < m; i++)
{
len = strlen(words[i]);
if(strncmp(words[i], str, len)==0)
{
*str += len;
autopsy(str, m);
}
}
if(flag == 1)
printf("YES\n");
else
printf("NO\n");
}
int main()
{
int m, l, i;
scanf("%d %d", &m, &l);
for(i = 0; i < m; i++)
scanf("%s", words[i]);
int t;
scanf("%d", &t);
while(t--)
{
flag = 0;
gets(str);
autopsy(str, m);
}
return 0;
}
首先,我读取较小单词的数量和最大长度。然后我读取要检查的较大字符串的数量,并输出是否可以形成。如何确保如果大单词是catsdog,我的单词是cat、cats和dog,那么首先删除cat,然后不能删除sdog,并给出答案为“否”,但实际答案是“是”。
Edit2: 是否可以使用数据结构TRIE来解决?