1)最長不重複子串
使用string
和vector
string findlongestnonrepeatsubstring(stringstr)
else
}//vector
::iterator it =svec.begin();
int maxindex = 0
;
for (unsigned int i = 1; i < svec.size(); ++i)
}return
svec[maxindex];
}---------------------原文:https:
2)字串的全排列
1class
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。
classsolution }}
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個位置都滿足如...