From 1eb60387ad884b13d0ea2a3b700eb03fac164f97 Mon Sep 17 00:00:00 2001 From: Ankitr19 Date: Mon, 18 Dec 2017 22:53:12 +0530 Subject: [PATCH 1/6] Suffix Array --- .../SuffixArray/Suffix_Array.cpp | 49 +++++++++++++++++++ .../String Search/SuffixArray/Suffix_Array.md | 27 ++++++++++ 2 files changed, 76 insertions(+) create mode 100644 Competitive Coding/Strings/String Search/SuffixArray/Suffix_Array.cpp create mode 100644 Competitive Coding/Strings/String Search/SuffixArray/Suffix_Array.md diff --git a/Competitive Coding/Strings/String Search/SuffixArray/Suffix_Array.cpp b/Competitive Coding/Strings/String Search/SuffixArray/Suffix_Array.cpp new file mode 100644 index 000000000..885147e8d --- /dev/null +++ b/Competitive Coding/Strings/String Search/SuffixArray/Suffix_Array.cpp @@ -0,0 +1,49 @@ +#include +using namespace std; + +struct suffix +{ + int index; + char *suff; +}; + +int cmp(struct suffix a, struct suffix b) +{ + return strcmp(a.suff,b.suff) < 0?1:0; +} + +int *buildSuffixArray(char *txt,int n) +{ + struct suffix suffixes[n]; + + for(int i=0;i 1 anana +3 ana alpabetically 0 banana +4 na 4 na +5 a 2 nana + +So, the suffix array for the string "banana" will be [5,3,1,0,4,2] + +Application of suffix array:- + +Suffix array is an extremely useful data structure, it can be used for a wide range of problems. Following are some famous problems where Suffix array can be used. +1) Pattern Searching +2) Finding the longest repeated substring +3) Finding the longest common substring +4) Finding the longest palindrome in a string From dd3b4395193df7745d4629f04ca1b7f1ca53d66b Mon Sep 17 00:00:00 2001 From: Ankit Raj Date: Mon, 18 Dec 2017 23:04:52 +0530 Subject: [PATCH 2/6] Update Suffix_Array.cpp --- .../Strings/String Search/SuffixArray/Suffix_Array.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/Competitive Coding/Strings/String Search/SuffixArray/Suffix_Array.cpp b/Competitive Coding/Strings/String Search/SuffixArray/Suffix_Array.cpp index 885147e8d..b52a05004 100644 --- a/Competitive Coding/Strings/String Search/SuffixArray/Suffix_Array.cpp +++ b/Competitive Coding/Strings/String Search/SuffixArray/Suffix_Array.cpp @@ -45,5 +45,4 @@ int main() int *suffixArr=buildSuffixArray(txt,n); cout<<"The suffix array is : \n"; printArr(suffixArr,n); - return 0; -} \ No newline at end of file +} From 5c4fe0dc944a6c836146bc3c631ebce44768f627 Mon Sep 17 00:00:00 2001 From: Ankit Raj Date: Thu, 28 Dec 2017 15:13:00 +0530 Subject: [PATCH 3/6] Update Suffix_Array.cpp Memory leak rectified. --- .../Strings/String Search/SuffixArray/Suffix_Array.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Competitive Coding/Strings/String Search/SuffixArray/Suffix_Array.cpp b/Competitive Coding/Strings/String Search/SuffixArray/Suffix_Array.cpp index b52a05004..ef789f272 100644 --- a/Competitive Coding/Strings/String Search/SuffixArray/Suffix_Array.cpp +++ b/Competitive Coding/Strings/String Search/SuffixArray/Suffix_Array.cpp @@ -31,10 +31,10 @@ int *buildSuffixArray(char *txt,int n) return suffixArr; } -void printArr(int arr[],int n) +void printArr(int* arr,int n) { for(int i=0;i Date: Thu, 28 Dec 2017 18:02:08 +0530 Subject: [PATCH 4/6] Update Suffix_Array.cpp Updated --- .../Strings/String Search/SuffixArray/Suffix_Array.cpp | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/Competitive Coding/Strings/String Search/SuffixArray/Suffix_Array.cpp b/Competitive Coding/Strings/String Search/SuffixArray/Suffix_Array.cpp index ef789f272..e882010b5 100644 --- a/Competitive Coding/Strings/String Search/SuffixArray/Suffix_Array.cpp +++ b/Competitive Coding/Strings/String Search/SuffixArray/Suffix_Array.cpp @@ -30,19 +30,23 @@ int *buildSuffixArray(char *txt,int n) return suffixArr; } - +/* void printArr(int* arr,int n) { for(int i=0;i Date: Thu, 28 Dec 2017 18:07:40 +0530 Subject: [PATCH 5/6] Update Suffix_Array.cpp --- .../Strings/String Search/SuffixArray/Suffix_Array.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Competitive Coding/Strings/String Search/SuffixArray/Suffix_Array.cpp b/Competitive Coding/Strings/String Search/SuffixArray/Suffix_Array.cpp index e882010b5..cfed860dc 100644 --- a/Competitive Coding/Strings/String Search/SuffixArray/Suffix_Array.cpp +++ b/Competitive Coding/Strings/String Search/SuffixArray/Suffix_Array.cpp @@ -48,5 +48,5 @@ int main() for(int i=0;i Date: Thu, 28 Dec 2017 18:30:47 +0530 Subject: [PATCH 6/6] Update Suffix_Array.cpp --- .../SuffixArray/Suffix_Array.cpp | 62 ++++++------------- 1 file changed, 19 insertions(+), 43 deletions(-) diff --git a/Competitive Coding/Strings/String Search/SuffixArray/Suffix_Array.cpp b/Competitive Coding/Strings/String Search/SuffixArray/Suffix_Array.cpp index cfed860dc..43ecd7f01 100644 --- a/Competitive Coding/Strings/String Search/SuffixArray/Suffix_Array.cpp +++ b/Competitive Coding/Strings/String Search/SuffixArray/Suffix_Array.cpp @@ -1,52 +1,28 @@ #include using namespace std; -struct suffix +void Suff_Arr(string s) { - int index; - char *suff; -}; - -int cmp(struct suffix a, struct suffix b) -{ - return strcmp(a.suff,b.suff) < 0?1:0; + map m; + + vector v; + for(int i = 0; i < s.size();i++) + { + m[s.substr(i,s.size()-i)] = i; + v.push_back(s.substr(i,s.size()-i)); + } + sort(v.begin(),v.end()); + for(int i = 0; i < v.size();i++) + { + cout << m[v[i]] <<" "; + } + cout<<"\n"; } -int *buildSuffixArray(char *txt,int n) -{ - struct suffix suffixes[n]; - - for(int i=0;i> s; + Suff_Arr(s); + return 0; }