字串問題 求乙個字串中重複出現的最長的子串

2021-09-06 12:02:16 字數 3426 閱讀 1129

2013-09-14 15:34:16

用字尾陣列求乙個字串中重複出現的最長的子串。

用c++中的string類可以很方便地進行操作,需將字尾陣列儲存在vector,如下面**中的string版本所示,但這樣就會因為有很大的開銷;

直接用字元指標指向字尾字串的首位址,可以節省很大的空間,如下面**中的char *版本所示.

注意使用char *版本時,用qsort函式最後綴字串陣列排序,需要提供comp函式,該函式的寫法如下:

1

int 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 #include 

4 #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 string

is : 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 ...