//兩種方法
/*給出一些列號碼,若果任乙個號碼不在另乙個中充當字首,那麼這系列號碼是合理的輸出yes,否則輸出no
思路:#標頭檔案中find函式的使用,按長度從小到大排列,那麼能當另乙個號碼字首的只能是前乙個當後乙個的字首,所以乙個乙個找
時間複雜度:o(n)*/
/*#include
#include
#include
#include
using namespace std;
int main()
sort(v.begin(), v.end());//按字串長度排序
for (i=0; i
/*思路:單詞查詢樹
建立一顆單詞查詢樹,找出葉子節點的個數,如果等於n那麼就是合法的,否則不合法*/
#include
#include
#define max_node_size 100000 //最大結點容量,題意最多有10000個號,每個號最多有10位
#define max_num_size 10 //每個號碼串最大長度
#define max_digit 10 //每個號碼串由0~9的數字組成
struct node ;
struct node nodespool[max_node_size]; //由於用new會超時,故在程式一開始便申請了靜態陣列
struct node *root; //trie樹的根
int nodenum; //使用nodespool陣列時用到
/*每次執行乙個測試用例前均應初始化*/
void init() }
root = &nodespool[0];
nodenum = 1;}
/*插入乙個**號碼。
*在插入過程中,並判斷:
*1)在trie樹中是否已有乙個串為新插入串的字首;
*2)該新插入的串是否為trie樹中某個串的字首。
*若滿足以上兩種情況,返回false,表示不插入;否則正確插入,返回true
*o(len)
*/bool insert(char *phonestr)//一邊插入一邊判斷
if(location->branch[index] == null)
else
/*不斷向前*/
location = location->branch[index];
}location->isend = true; //到達該結點,結束。注意:對於每個串,若串長度為n,則需n+1個結點表示
return true;}
int main() }
if(isconsistent)
printf("yes/n");
else
printf("no/n");}
return 0;}
單詞查詢樹
一 概念 從上面的圖中,我們或多或少的可以發現一些好玩的特性。第一 根節點不包含字元,除根節點外的每乙個子節點都包含乙個字元。第二 從根節點到某一節點,路徑上經過的字元連線起來,就是該節點對應的字串。第三 每個單詞的公共字首作為乙個字元節點儲存。二 使用範圍 既然學trie樹,我們肯定要知道這玩意是...
單詞查詢樹
在進行文法分析的時候,通常需要檢測乙個單詞是否在我們的單詞列表裡。為了提高查詢和定位的速度,通常都畫出與單詞列表所對應的單詞查詢樹,其特點如下 1 根結點不包含字母,除根結點外每乙個結點都僅包含乙個大寫英文本母 2 從根結點到某一結點,路徑上經過的字母依次連起來所構成的字母序列,稱為該結點對應的單詞...
單詞查詢樹
一 將基於含有r個字元的字母表的單詞查詢樹稱為r向單詞查詢樹。p479 1 基於單詞查詢樹的符號表 基於單詞查詢樹的符號表 public class triest public value get string key private node get node x,string key,int d...