这个提交了很多次都显示
Memory Limit Exceeded |
后来发现只能申请静态内存才可以,改后成功AC
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct TRIETREENODE
{
int cnt;//判断是否为单词
struct TRIETREENODE *next[26];
}trietreenode;
int top;
struct TRIETREENODE a[1000000];//申请静态
trietreenode *createTrieTreeNode()
{
int i;
trietreenode *treeNode = &a[top++];
for(i = 0; i < 26; i++)
treeNode->next[i] = NULL; //节点的next全指向为NULL
treeNode -> cnt = 0;
return treeNode;
}
int InsertTrieTreeNode(trietreenode *ptrRoot, char *str)
{
int i, index;
trietreenode *tempNode = ptrRoot;
for( i = 0 ;i < strlen(str); i++)
{
index = str[i] - 'a';
if(tempNode->next[index]!=NULL)
{
tempNode = tempNode->next[index];
continue;
}
tempNode->next[index] = createTrieTreeNode();
tempNode = tempNode->next[index];
}
tempNode->cnt = 1;//这里循环完成,标记为单词
return 0;
}
int SearchTrieTree(trietreenode *ptrRoot, char *str)
{
int i, index;
trietreenode *tempNode = ptrRoot;
for(i = 0 ;i < strlen(str); i++)
{
index = str[i] - 'a';
if(tempNode->next[index]!=NULL)
{
tempNode = tempNode->next[index];
}
else
{
return 0;
}
}
if(tempNode->cnt==1)
{
return 1;
}
else
{
return 0;
}
}
int main()
{
int n,m;
char s[10];
while(scanf("%d %d", &n, &m)!=EOF&&n&&m)
{
top = 0;
trietreenode *tree = createTrieTreeNode();
getchar();
while(n--)
{
gets(s);
InsertTrieTreeNode(tree, s);
}
while(m--)
{
gets(s);
int res = SearchTrieTree(tree, s);
if(res == 1)
printf("Yes\n");
else
printf("No\n");
}
}
}