亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? trie.java

?? 經(jīng)典的數(shù)據(jù)結(jié)構(gòu)算法
?? JAVA
字號:
/************************  Trie.java  *******************************
 *
 */

class TrieNode {
    public boolean isLeaf;
}

class TrieNonLeaf extends TrieNode {
    public boolean endOfWord = false;
    public String letters;
    public TrieNode[] ptrs = new TrieNode[1];
    public TrieNonLeaf() {
        isLeaf = false;
    }
    public TrieNonLeaf(char ch) {
        letters = new String();
        letters += ch;
        isLeaf = false;
    }
}

class TrieLeaf extends TrieNode {
    public String suffix;
    public TrieLeaf() {
        isLeaf = true;
    }
    public TrieLeaf(String suffix) {
        this.suffix = new String(suffix);
        isLeaf = true;
    }
}

class Trie {
    private TrieNonLeaf root;
    private final int notFound = -1;
    public Trie() {
    }
    public Trie(String word) {
        root = new TrieNonLeaf(word.charAt(0)); // initialize the root
        createLeaf(word.charAt(0),word.substring(1),root); // to avoid later 
    }                                                      // test;
    public void printTrie() {
        printTrie(0,root,new String()); // assumption: the root is not null;
    }
    private void printTrie(int depth, TrieNode p, String prefix) {
        if (p.isLeaf) {
             for (int j = 1; j <= depth; j++)
                 System.out.print("   ");
             System.out.println("  >" + prefix + "|" + ((TrieLeaf)p).suffix);
        }
        else {
             for (int i = ((TrieNonLeaf)p).letters.length()-1; i >= 0; i--) {
                 if (((TrieNonLeaf)p).ptrs[i] != null) {
                     // add the letter corresponding to position i to prefix;
                     prefix = prefix.substring(0,depth) +
                              ((TrieNonLeaf)p).letters.charAt(i);
                     printTrie(depth+1,((TrieNonLeaf)p).ptrs[i],prefix);
                 }
                 else { // if leaf is null;
                      for (int j = 1; j <= depth+1; j++)
                          System.out.print("   ");
                      System.out.println(" >>" + prefix.substring(0,depth) +
                                ((TrieNonLeaf)p).letters.charAt(i));
                 }
             }
             if (((TrieNonLeaf)p).endOfWord) {
                  for (int j = 1; j <= depth+1; j++)
                      System.out.print("   ");
                  System.out.println(">>>" + prefix.substring(0,depth));
             }
        }
    }
    private int position(TrieNonLeaf p, char ch) {
        int i = 0;
        for ( ; i < p.letters.length() && p.letters.charAt(i) != ch; i++);
        if (i < p.letters.length())
             return i;
        else return notFound;
    } 
    public boolean found(String word) {
        TrieNode p = root;
        int pos, i = 0;
        while (true)
            if (p.isLeaf) {                     // node p is a leaf
                TrieLeaf lf = (TrieLeaf) p;     // where the matching
                if (word.substring(i).equals(lf.suffix)) // suffix of
                     return true;               // word should be found;
                else return false;
            }
            else if ((pos = position((TrieNonLeaf)p,word.charAt(i))) != notFound
                     && i+1 == word.length())   // the end of word has to
                 if (((TrieNonLeaf)p).ptrs[pos] == null) // correspond 
                      return true;              // with an empty leaf
                 else if(!(((TrieNonLeaf)p).ptrs[pos]).isLeaf &&
                          ((TrieNonLeaf)((TrieNonLeaf)p).ptrs[pos]).endOfWord)
                      return true;              // or the endOfWord marker on;
                 else return false;
            else if (pos != notFound && ((TrieNonLeaf)p).ptrs[pos] != null) {
                 p = ((TrieNonLeaf)p).ptrs[pos];// continue path, 
                 i++;                           // if possible,
            }
            else return false;                  // otherwise failure;
    }
    private void addCell(char ch, TrieNonLeaf p, int stop) {
        int i;
        int len = p.letters.length();
        char[] s = new char[len+1];
        TrieNode[] tmp = p.ptrs;
        p.ptrs = new TrieNode[len+1];
        for (i = 0; i < len+1; i++)
            p.ptrs[i] = null;
        if (stop < len)           // if ch does not follow all letters in p,
            for (i = len; i >= stop+1; i--) { // copy from tmp letters > ch;
                p.ptrs[i] = tmp[i-1];
                s[i] = p.letters.charAt(i-1);
            }
        s[stop] = ch;
        for (i = stop-1; i >= 0; i--) {       // and letters < ch;
            p.ptrs[i] = tmp[i];
            s[i] = p.letters.charAt(i);
        }
        p.letters = new String(s);
    }
    private void createLeaf(char ch, String suffix, TrieNonLeaf p) {
        int pos = position(p,ch);
        TrieLeaf lf = null;
        if (suffix != null && suffix.length() > 0) // don't create any leaf
            lf = new TrieLeaf(suffix);             // if there is no suffix;
        if (pos == notFound) {
            for (pos = 0; pos < p.letters.length() &&
                          p.letters.charAt(pos) < ch; pos++);
            addCell(ch,p,pos);
        }
        p.ptrs[pos] = lf;
    }
    public void insert(String word) {
        TrieNonLeaf p = root;
        TrieLeaf lf;
        int offset, pos, i = 0;
        while (true) {
            if (i == word.length()) {       // if the end of word reached,
                 if (p.endOfWord)
                      System.out.println("duplicate entry1: " + word);
                 p.endOfWord = true;        // set endOfWord to true;
                 return;
            }                               // if position in p indicated
            pos = position(p,word.charAt(i));
            if (pos == notFound) {          // by the first letter of word
                 createLeaf(word.charAt(i),word.substring(i+1),p);
                                            // does not exist, create
                 return;                    // a leaf and store in it the
            }                               // unprocessed suffix of word;
            else if (pos != notFound &&     // empty leaf in position pos;
                   p.ptrs[pos] == null) {
                 if (i+1 == word.length()) {
                      System.out.println("duplicate entry2: " + word);
                      return;
                 }
                 p.ptrs[pos] = new TrieNonLeaf(word.charAt(i+1));
                 ((TrieNonLeaf)(p.ptrs[pos])).endOfWord = true;
                 // check whether there is any suffix left:
                 String s = (word.length() > i+2) ? word.substring(i+2) : null;
                 createLeaf(word.charAt(i+1),s,(TrieNonLeaf)(p.ptrs[pos]));
                 return;
            }
            else if (pos != notFound &&     // if position pos is
                   p.ptrs[pos].isLeaf) {    // occupied by a leaf,
                 lf = (TrieLeaf) p.ptrs[pos]; // hold this leaf;
                 if (lf.suffix.equals(word.substring(i+1))) {
                      System.out.println("duplicate entry3: " + word);
                      return;
                 }
                 offset = 0;
                 // create as many non-leaves as the length of identical
                 // prefix of word and the string in the leaf (for cell 'R',
                 // leaf "EP", and word "REAR", two such nodes are created);
                 do {
                     pos = position(p,word.charAt(i+offset));
                     // word = "ABC", leaf = "ABCDEF" => leaf = "DEF";
                     if (word.length() == i+offset+1) {
                          p.ptrs[pos] = new TrieNonLeaf(lf.suffix.charAt(offset));
                          p = (TrieNonLeaf) p.ptrs[pos];
                          p.endOfWord = true;
                          createLeaf(lf.suffix.charAt(offset),
                                     lf.suffix.substring(offset+1),p);
                          return;
                     }
                     // word = "ABCDEF", leaf = "ABC" => leaf = "DEF";
                     else if (lf.suffix.length() == offset ) {
                          p.ptrs[pos] = new TrieNonLeaf(word.charAt(i+offset+1));
                          p = (TrieNonLeaf) p.ptrs[pos];
                          p.endOfWord = true;
                          createLeaf(word.charAt(i+offset+1),
                                     word.substring(i+offset+2),p);
                          return;
                     }
                     p.ptrs[pos] = new TrieNonLeaf(word.charAt(i+offset+1));
                     p = (TrieNonLeaf) p.ptrs[pos];
                     offset++;
                 } while (word.charAt(i+offset) == lf.suffix.charAt(offset-1));
                 offset--;
                 // word = "ABCDEF", leaf = "ABCPQR" =>
                 //     leaf('D') = "EF", leaf('P') = "QR";
                 // check whether there is any suffix left:
                 // word = "ABCD", leaf = "ABCPQR" =>
                 //     leaf('D') = null, leaf('P') = "QR";
                 String s = null;
                 if (word.length() > i+offset+2)
                      s = word.substring(i+offset+2);
                 createLeaf(word.charAt(i+offset+1),s,p);
                 // check whether there is any suffix left:
                 // word = "ABCDEF", leaf = "ABCP" =>
                 //     leaf('D') = "EF", leaf('P') = null;
                 if (lf.suffix.length() > offset+1)
                      s = lf.suffix.substring(offset+1);
                 else s = null;
                 createLeaf(lf.suffix.charAt(offset),s,p);
                 return;
            }
            else {
                 p = (TrieNonLeaf) p.ptrs[pos];
                 i++;
            }
        }
    }
}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩免费福利电影在线观看| 丰满放荡岳乱妇91ww| 亚洲欧美日韩一区| 亚洲国产精品成人综合色在线婷婷 | 欧美一级片在线看| 91麻豆精品国产自产在线观看一区 | 亚洲图片欧美一区| 亚洲电影视频在线| 亚洲精品第1页| 亚洲一区二区三区小说| 午夜欧美2019年伦理| 轻轻草成人在线| 激情综合网av| 床上的激情91.| 99热精品一区二区| 欧美久久一二区| 精品国产一区二区三区不卡 | 国产精品美女www爽爽爽| 中文字幕在线不卡一区| 亚洲最快最全在线视频| 图片区小说区区亚洲影院| 久久99久久99精品免视看婷婷| 久久爱另类一区二区小说| 不卡一区中文字幕| 欧美日韩高清不卡| 日本一区二区三区久久久久久久久不 | 一区二区三区成人在线视频| 午夜欧美大尺度福利影院在线看| 日本aⅴ免费视频一区二区三区| 国产精品一二三四| 欧美性猛交一区二区三区精品| 91精品国产91久久久久久最新毛片| 欧美精品一区二区三区一线天视频 | 久久精品二区亚洲w码| 成人三级伦理片| 日韩一区二区三区在线| 国产蜜臀av在线一区二区三区| 一区二区三区四区不卡视频| 激情图片小说一区| 在线观看亚洲专区| 国产欧美一区二区在线| 三级在线观看一区二区| 97久久精品人人做人人爽50路| 欧美一卡在线观看| 一区二区激情视频| 成人午夜精品在线| 26uuu亚洲综合色| 天堂va蜜桃一区二区三区 | 无码av免费一区二区三区试看| 国产精品99久久久久| 在线电影院国产精品| 国产精品传媒在线| 国内外精品视频| 日韩一区二区不卡| 亚洲成人在线观看视频| 91视视频在线直接观看在线看网页在线看 | 91黄视频在线观看| 国产精品色哟哟网站| 国产高清无密码一区二区三区| 91麻豆精品国产自产在线 | 国产视频一区在线观看| 日韩av二区在线播放| 色88888久久久久久影院野外 | 在线免费观看日韩欧美| 国产日产欧美一区| 国产超碰在线一区| 2024国产精品| 国产又黄又大久久| 久久久久一区二区三区四区| 国产一区二区在线影院| 久久亚洲一级片| 国产乱码精品一区二区三| 欧美xingq一区二区| 日本欧洲一区二区| 欧美变态tickling挠脚心| 麻豆91精品91久久久的内涵| 欧美一区二区黄色| 久久国产欧美日韩精品| 欧美电影精品一区二区| 国模一区二区三区白浆| 国产午夜精品一区二区三区嫩草| 国产伦精品一区二区三区免费| 久久久久97国产精华液好用吗| 国产成人亚洲精品青草天美 | 91在线观看视频| 亚洲激情五月婷婷| 欧美日韩久久一区二区| 午夜视频在线观看一区二区三区| 欧美日韩国产一区二区三区地区| 亚洲国产日产av| 日韩一级片网址| 国产精品一区二区三区99| 中文字幕乱码久久午夜不卡 | 欧美电影免费观看高清完整版在线观看 | 91精品国产欧美一区二区18| 麻豆一区二区三| 国产精品美女久久久久av爽李琼| 一本久久精品一区二区| 日本美女一区二区| 久久久久久日产精品| kk眼镜猥琐国模调教系列一区二区| 一区二区三区久久久| 精品欧美一区二区三区精品久久| 高清不卡在线观看| 亚洲va中文字幕| 久久久不卡网国产精品一区| 在线免费观看日韩欧美| 国产裸体歌舞团一区二区| 亚洲人成网站精品片在线观看| 在线播放/欧美激情| 国产mv日韩mv欧美| 日韩精品一二三四| 亚洲欧洲日韩在线| 欧美成人猛片aaaaaaa| 在线观看av一区| 国产精品一级二级三级| 日韩精品亚洲专区| 亚洲欧美综合网| 精品处破学生在线二十三| 91传媒视频在线播放| 老汉av免费一区二区三区 | 国产嫩草影院久久久久| 欧美久久久影院| 99re热视频这里只精品| 国产一区999| 日韩成人一区二区三区在线观看| 亚洲天堂av老司机| 久久蜜臀中文字幕| 日韩欧美不卡一区| 欧美精品vⅰdeose4hd| 在线免费观看一区| 91丨九色porny丨蝌蚪| 成人美女视频在线观看18| 久久国产麻豆精品| 日韩av电影免费观看高清完整版| 一区二区三区四区国产精品| 中文字幕高清不卡| 国产亚洲一区字幕| 日韩精品中午字幕| 欧美高清你懂得| 欧美日韩精品一区二区| 欧美中文字幕一区二区三区| 96av麻豆蜜桃一区二区| 国产99久久久精品| 国产成a人亚洲精品| 国产精品一区二区久久不卡| 国产伦精一区二区三区| 国产一区久久久| 高清不卡一二三区| 成人美女视频在线看| 不卡一二三区首页| 99精品国产热久久91蜜凸| 色综合久久久久综合99| 91极品视觉盛宴| 欧美日韩国产在线观看| 日韩一区二区免费视频| 精品久久久久久久一区二区蜜臀| 日韩美女一区二区三区| 欧美va亚洲va国产综合| 欧美哺乳videos| 亚洲国产高清不卡| 一色桃子久久精品亚洲| 亚洲一区在线播放| 日本伊人精品一区二区三区观看方式| 日韩二区在线观看| 国产成人免费视| 色综合视频在线观看| 欧美久久一区二区| 久久亚洲精华国产精华液| 国产精品久久久久一区二区三区 | 91精品综合久久久久久| 538在线一区二区精品国产| 欧美一区二区在线观看| 久久婷婷一区二区三区| 亚洲色欲色欲www| 亚洲va在线va天堂| 国产伦精品一区二区三区免费 | 欧美乱熟臀69xxxxxx| 久久婷婷综合激情| 亚洲欧美日韩国产一区二区三区| 亚洲成人精品一区二区| 国内一区二区视频| 欧美亚洲丝袜传媒另类| 欧美精品一区二区精品网| 国产精品久久久久久久久久久免费看 | 99麻豆久久久国产精品免费| 欧美日韩高清一区二区不卡| 26uuu久久天堂性欧美| 亚洲一区二区精品久久av| 精品一区二区三区视频| 色婷婷久久久久swag精品| 日韩美女在线视频| 亚洲一区二区欧美激情| 国产精品自在欧美一区| 欧美日韩在线直播| 欧美激情一区二区在线| 免费看黄色91| 欧美色老头old∨ideo| 国产精品理论在线观看| 蜜臀精品久久久久久蜜臀|