2013-09-14 15:34:16
用字尾陣列求乙個字串中重複出現的最長的子串。
用c++中的string類可以很方便地進行操作,需將字尾陣列儲存在vector,如下面**中的string版本所示,但這樣就會因為有很大的開銷;
直接用字元指標指向字尾字串的首位址,可以節省很大的空間,如下面**中的char *版本所示.
注意使用char *版本時,用qsort函式最後綴字串陣列排序,需要提供comp函式,該函式的寫法如下:
1int pstrcmp(const
void *p,const
void *q)
2
更多關於該函式的說明,詳見博文
**(string版本):
1 #include 2 #include 3 #include //用string類模板,必須包含該標頭檔案
4 #include //
用vector模板,必須包含該標頭檔案
5 #include //
用sort函式,必須包含該標頭檔案
6using
namespace
std;78
//獲取兩個字串的最長公共子串
9 size_t getlcs(const
string &str1,const
string &str2)
1025
else
2629}30
31return
commenlen;32}
3334
//獲取字串中重複出現且最長的子串
35 size_t findlongestringapeartwice(const
string &srcstr,string &substr)
3652
53 sort(vecstr.begin(),vecstr.end()); //
對字尾字串陣列排序
5455 vector::iterator iter;
5657
for (iter = vecstr.begin();(iter + 1) != vecstr.end();++iter) //
求相鄰string的lcs
5866}67
68return
maxlen;69}
7071
7273
74//
測試findlongestringapeartwice
75void
testdriver()76;
78 size_t arraylength = 4;79
80string
srcstr;
81string
substr;
82 size_t maxlen = 0;83
84for (size_t index = 0;index < arraylength;++index)
8595}96
97int
main()
98
**(char *版本):
1 #include 2 #include 3 #include4 #include 5 #include 6
using
namespace
std;
78 size_t getlcs(const
char *str1,const
char *str2)926
else
2730}31
32return
commenlen;33}
3435 typedef char *pchar;
3637
int pstrcmp(const
void *p,const
void *q)
3841
42void displaystring(const
char *pstr)
4351 cout<5354 size_t findlongeststringapeartwice(const
char *psrcstr,char *&psubstr)
5572
73 qsort(psuffixarray,lenofsrcstr,sizeof
(pchar),pstrcmp);
74/*
75for ( index = 0;index < end;++index )
76*/
7980
for (index = 0;index + 1
< end;++index)
8189}90
91return
maxlen;92}
9394
95void
testdriver()96;
98 size_t arraylength = 4;99
100pchar srcstr;
101pchar substr;
102 size_t maxlen = 0
;103
104for (size_t index = 0;index < arraylength;++index)
105116 cout<117118 cout<<"
the max length is :
"119 cout<120}
121}
122123
124int
main()
125
測試結果:
the source stringis : 0123456
the longest sub
stringis:
the max length
is : 0
the source
string
is: yyabcdabjcabceg
the longest sub
string
is: abc
the max length
is : 3
the source
string
is: abcbcbcabc
the longest sub
string
is: bcbc
the max length
is : 4
the source
string
is : hello,li mei! hello,li lei!the longest sub
string
is: hello,li
the max length
is : 9
請按任意鍵繼續. . .
字串問題 求乙個字串中重複出現的最長的子串
2013 09 14 15 34 16 用字尾陣列求乙個字串中重複出現的最長的子串。用c 中的string類可以很方便地進行操作,需將字尾陣列儲存在vector,如下面 中的string版本所示,但這樣就會因為有很大的開銷 直接用字元指標指向字尾字串的首位址,可以節省很大的空間,如下面 中的char...
刪除乙個字串中重複出現的字元
演算法思想 以 0 結束標誌,遍歷字串元素surchr,讓每個字元與輸出output字串每個元素做比較。一旦output中 最後乙個元素與chr不等,output增加元素,否則,中間就用break跳出,開始判斷下乙個surchr 1 include include using namespace s...
在乙個字串中尋找另外乙個字串
在乙個字串中尋找另外乙個字串 public class text foundit true break test system.out.println foundit?found it didn t find it 該段程式有點難以理解,主要就是if語句的理解,if searchme.charat ...