单词查找树


分析:



1 #include<iostream>
2 #include<cstdio>
3 #include<string>
4 using namespace std;
5 int i,j,n,t,k;
6 string a[8001];//数组可以达到32*1024=32768,一个单词一个字节 ,一个换行符2个字节
7 string s;
8 int main()
9 {
10 //freopen("word.txt","r",stdin);
11 //freopen("word.out","w",stdout);
12 while(cin>>a[++n]);//读入文件中的单词并存储在数组a中
13 /*
14 while(cin>>s)
15 {
16 a[++n]=s;
17 }
18 */
19 n--;
20 for(i=1;i<n;i++)//单词从小到大排序,选排可以改为快排sort(a+1,a+1+n)
21 {
22 for(j=i+1;j<=n;j++)
23 {
24 if(a[i]>a[j])//两个单词进行交换
25 {
26 s=a[i];
27 a[i]=a[j];
28 a[j]=s;
29 }
30 }
31 }
32 //cout<<n<<endl;
33 //for(i=1;i<=n;i++) cout<<a[i]<<endl;
34 t=a[1].length();//先累加第一个单词的长度
35 for(i=2;i<=n;i++)//依次计算每个单词对前一个单词的差
36 {
37 j=0;
38 while(a[i][j]==a[i-1][j]&&j<a[i-1].length())
39 j++;//求两个单词相同部分的长度
40 t+=a[i].length()-j;//累加两个单词的差length(a[i])-j
41 }
42 cout<<t+1<<endl;
43 return 0;
44 }
45