博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
字符串数据结构算法题-C++
阅读量:6871 次
发布时间:2019-06-26

本文共 2904 字,大约阅读时间需要 9 分钟。

1)最长不重复子串

使用stringvector<string>

string FindLongestNonRepeatSubstring(string str){    if (str.empty()) return "";    string tmp;//存放临时不重复的子串    vector
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
::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
&result){ 4 if(begin==s.size()-1) 5 result.push_back(s); 6 for(int i=begin;i
Permutation(string str) {16 vector
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] != '\0')    {        if(B[j] != '\0')        {            if(A[i] == B[j])            {                i ++;                j ++;            }            else             {                i = i - j +1;                j = 0;            }        }        if(j == strlen(B))         {            return i - j;        }    }    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 {public:    // 最长回文串,使用dp    string longestPalindrome(string str)    {     int n = str.length();    if(n==0) return "";    bool dp[n][n];    fill_n(&dp[0][0],n*n,false);    int left=0,right=0,maxLen = 0;    for(int j=0;j
maxLen)) { left = i; right = j; maxLen = j-i+1; } } } return str.substr(left,right-left+1); }};

 

转载于:https://www.cnblogs.com/ArleneZhangfj/p/10023170.html

你可能感兴趣的文章
GlusterFS的基础应用
查看>>
ORA-09925: Unable to create audit trail file Linux-x86_64
查看>>
如何跳出嵌套语句之return
查看>>
API概述
查看>>
python2.6 安装rsa的包
查看>>
undo表空间使用率过高,且迟迟不释放问题
查看>>
scons *** no sconstruct file found求解决办法
查看>>
BIND基础配置详解
查看>>
火狐增加安全端口,每次用都得查,好麻烦,自己记录一下
查看>>
c# 多线程排队队列实现的源码
查看>>
LDA入门与Java实现
查看>>
19_css背景控制.html
查看>>
计算机网络测试和故障诊断的发展
查看>>
Delphi 与 DirectX 之 DelphiX(29): TDIB.AddMonoNoise();
查看>>
Windows Server 2008 FTP用户目录隔离模式
查看>>
zookeeper-kafka环境搭建,生产者消费者终端测试
查看>>
Catnut 微博app第一个版本发布了
查看>>
python实现linux下指定目录下文件中的单词个数统计
查看>>
SQL SERVER存储过程中如何使用事务与try catch
查看>>
我的友情链接
查看>>