字串資料結構演算法題 C

2022-03-26 08:33:11 字數 1512 閱讀 4978

1)最長不重複子串

使用stringvector

string findlongestnonrepeatsubstring(string

str)

else

}//vector

::iterator it =svec.begin();

int maxindex = 0

;

for (unsigned int i = 1; i < svec.size(); ++i)

}return

svec[maxindex];

}---------------------原文:https:

2)字串的全排列

1

class

solution 13}

1415 vector permutation(string

str)

21 };

3)判斷字串a是否是字串b的子串(字串模式匹配)- 簡單演算法(bf)

kmp字串模式匹配演算法是在乙個字串中定位另乙個串的高效演算法,時間複雜度為o(m+n)。簡單匹配演算法的時間複雜度為o(m*n)。

int bf(char *a, char *b)

else

}if(j ==strlen(b))

}return -1

;}

4)字串中的最長回文子串-動態規劃方法解

假設字串s的長度為n,建立乙個n*n的狀態轉移矩陣dp

dp[i][j]表示「以s[i]開始s[j]結尾的子串是否為回文串。如果這個字串不是回文串,讓dp[i][j]=0」;否則為1。

dp[i][j]的遞推公式可以這麼表述:

(1)當i==j時,dp[i][j]=1。

這很顯然,每個單獨的字元其實就是回文串。

(2)當 j-i<2:

若s[i]==s[j],則dp[i][j]=1;否則dp[i][j]=0。

解釋:當j-i==1時,若s[i]==s[j],則s[i]和s[j]可以組成乙個長度為2的回文串。若s[i]!=s[j],顯然他們不可能組成回文串,dp[i][j]=0。

(3)當j-i>=2:

若s[i]==s[j]:若dp[i+1][j-1]=1,則dp[i][j]= 1;否則dp[i][j]= 0;

若s[i]!=s[j]:dp[i][j]=0。

解釋:如果s[i]==s[j],表明這個子串有可能是回文串。當去頭去尾後它是回文串時,則dp[i][j]= 1。如果去頭去尾後不是回文串,那這個子串一定不是回文串,回文串長度只能是0。

若s[i]!=s[j],顯然他們不可能組成回文串,dp[i][j]=0。

class

solution }}

return str.substr(left,right-left+1

); }

};

C 資料結構 字串

1 菜鳥教程 c 字串 2 3 4 官網教程 5 教程中的注釋 6 詳細的串定義與模式匹配演算法 1 串的定義 串 字串的簡稱 是由零個或多個字元組成的有限序列,一般記為s a1a2a3 an 其中ai可以是字母,數字或者其他字元,零個字元的串稱為空串。串中 任意個連續的字元組成的子串行 稱為該串的...

資料結構與演算法 字串

判斷乙個串是不是回文串,往往要分開編寫,造成 的拖沓 int longestpalindrome const char s,int n return max void longestpalindrome test 上面的迴圈中,對於回文長度本身的奇偶性,我們進行區別處理。這樣有點拖沓。我們根據乙個簡...

資料結構與演算法 字串

生成n對括號的所有合法排列 描述 給定乙個非負整數n,生成n對括號的所有合法排列。解答 該問題解的個數就是卡特蘭數,但是現在不是求個數,而是要將所有合法的括號排列列印出來。該問題和 程式設計之美 的買票找零問題一樣,通過買票找零問題我們可以知道,針對乙個長度為2n的合法排列,第1到2n個位置都滿足如...