poj2001 trie

简介:
#include<cstdio>
#include<iostream>
#include<cstring>
using namespace std;
int T[100100][26] = {0}, num[100100] = {0}, sz = 0;
char s[1010][21];
void Insert(char *s){
	int u = 0;
	for (int i = 0; s[i]; i++){
		int c = s[i] - 'a';
		if (!T[u][c])
			T[u][c] = ++sz;
		u = T[u][c];
		num[u] ++;
	}
}
void Search(char *s){
	int u = 0;
	for (int i = 0; s[i]; i++){
		if (num[u] == 1) break;
		u = T[u][s[i] - 'a'];
		printf("%c", s[i]);
	}
	printf("\n");
}
int main(){
	int n = 0;
	while (scanf("%s", s[++n]) == 1)
		Insert(s[n]);
	for (int i = 1; i <= n; i++){
		printf("%s ", s[i]);
		Search(s[i]);
	}
	    
    return 0;
	
} 

相关文章
|
6天前
|
存储 C++
leetcode-208:实现 Trie (前缀树/字典树)
leetcode-208:实现 Trie (前缀树/字典树)
26 0
|
7月前
|
人工智能
poj 2299 Ultra-QuickSort 求逆序数 树状数组解法
所谓离散化,我们的了解就是对原数组排序,然后用所在位置的下标代替原数,这样我们就可以把数据范围缩小到1-500000,这个数组是开的下的。
23 0
|
存储 C++
【LeetCode208】实现Trie(前缀树)
这里的前缀树,即“二十六叉树”,但是对于每个结点(对象),我们可以隐性存储一个字符——每个结点(对象)含有一个size为26的指针数组。接着就从根结点开始遍历判
101 0
【LeetCode208】实现Trie(前缀树)