1)最长不重复子串
使用string
和vector<string>
string FindLongestNonRepeatSubstring(string str) { if (str.empty()) return ""; string tmp;//存放临时不重复的子串 vector<string> svec;//存放所有不重复的子串 int start = 0;//标记每次开始查找子串的下标 int pos = -1; //查找当前字符在子串中的位置下标 tmp.push_back(str[0]); for (unsigned int i = 1; i < str.size(); ++i) { pos = tmp.find(str[i]); if (pos == -1) { tmp.push_back(str[i]); } else { svec.push_back(tmp); tmp.clear(); start = start + pos + 1; i = start; tmp.push_back(str[i]); } } //vector<string>::iterator it = svec.begin(); int maxIndex = 0; for (unsigned int i = 1; i < svec.size(); ++i) { if (svec[i].size() > svec[maxIndex].size()) { maxIndex = i; } } return svec[maxIndex]; } --------------------- 原文:https://blog.csdn.net/yishizuofei/article/details/79059844
2)字符串的全排列
1 class Solution { 2 public: 3 void dfs(string s,int begin,vector<string> &result){ 4 if(begin==s.size()-1) 5 result.push_back(s); 6 for(int i=begin;i<s.size();i++){ 7 if(i!=begin&&s[i]==s[begin]) 8 continue; 9 swap(s[i],s[begin]); 10 dfs(s,begin+1,result); 11 swap(s[i],s[begin]); 12 } 13 } 14 15 vector<string> Permutation(string str) { 16 vector<string> result; 17 dfs(str,0,result); 18 sort(result.begin(),result.end());//按照字典序输出 19 return result; 20 } 21 };
3)判断字符串A是否是字符串B的子串(字符串模式匹配)- 简单算法(BF)
KMP字符串模式匹配算法是在一个字符串中定位另一个串的高效算法,时间复杂度为O(m+n)。简单匹配算法的时间复杂度为O(m*n)。
int BF(char *A, char *B) { int i = 0, j = 0; while(A[i] != '