Programming Algorithm-Suffix Tree code (C)
Suffix Tree code (C)
Address: http://blog.csdn.net/caroline_wendy
Give you a long string s and a collection of many short strings {T1, T2 ,...}, design a method to query T1, T2 ,..., locate the position of Ti in s.
Code:
/** Main. cpp ** Created on: 2014.7.20 * Author: Spike * // * eclipse cdt, gcc 4.8.1 */# include
# Include
# Include
Using namespace std; class SuffixTreeNode {map
Children; char value; vector
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
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
Empty; return empty ;}}}~ SuffixTreeNode () {map
: 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
InsertString (suffix, I) ;}} vector
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
Li = tree. getIndexes (stringList [I]); if (li. size ()! = 0) {cout <stringList [I] <""; for (int j = 0; j
Output:
is 1 4 sip 6 sis 3