編程演算法 - 尾碼樹(Suffix Tree) 代碼(C)

來源:互聯網
上載者:User

標籤:mystra   編程演算法   尾碼樹   字串匹配   代碼   

尾碼樹(Suffix Tree) 代碼(C)


本文地址: http://blog.csdn.net/caroline_wendy


給你一個長字串s與很多短字串集合{T1,, T2, ...}, 設計一個方法在s中查詢T1, T2, ..., 要求找出Ti在s中的位置.


代碼:

/* * main.cpp * *  Created on: 2014.7.20 *      Author: Spike *//*eclipse cdt, gcc 4.8.1*/#include <iostream>#include <vector>#include <map>using namespace std;class SuffixTreeNode {map<char, SuffixTreeNode*> children;char value;vector<int> indexes;public:SuffixTreeNode() {}void insertString(string s, int index) {indexes.push_back(index);if (s.length() > 0) {value = s[0];SuffixTreeNode* child = NULL;if (children.find(value) != children.end()) {child = children[value];} else {child = new SuffixTreeNode();children[value] = child;}string remainder = s.substr(1);child->insertString(remainder, index);}}vector<int> getIndexes(string s) {if (s.length() == 0)return indexes;else {char first = s[0];if (children.find(first) != children.end()) {string remainder = s.substr(1);return children[first]->getIndexes(remainder);} else {vector<int> empty;return empty;}}}~SuffixTreeNode() {map<char, SuffixTreeNode*>::iterator it;for (it!=children.begin(); it!=children.end(); ++it)delete it->second;}};class SuffixTree {SuffixTreeNode* root;public:SuffixTree(string s) {root = new SuffixTreeNode;for (int i=0; i<s.length(); ++i) {string suffix = s.substr(i);root->insertString(suffix,i);}}vector<int> getIndexes(string s) {return root->getIndexes(s);}~SuffixTree() {}};int main(void){string testString = "mississippi";string stringList[] = {"is", "sip", "hi", "sis"};SuffixTree tree (testString);for (int i=0; i<4; i++) {vector<int> li = tree.getIndexes(stringList[i]);if (li.size() != 0) {cout << stringList[i] << "  ";for (int j=0; j<li.size(); ++j)cout << li[j] << " ";cout << endl;}}return 0;}

輸出:

is  1 4 sip  6 sis  3 



編程演算法 - 尾碼樹(Suffix Tree) 代碼(C)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.