方法1:暴力循环,算法复杂度nmm
方法2:使用矩阵(二维数组)存储状态,时间换空间, 算法复杂度mn,空间复杂度mn
#include <iostream>
#include <string>
using namespace std;
//算法复杂度n*m*m
int maxchar(char *s,int m,char *t,int n){
int i=0,j=0;
int max=0,pos=0,cmax=0;//
// char res[];
while(i<n){
while(j<m){
cmax = 0;
for(int k=j,l=i;k<m&&l<n&&t[l]==s[k];l++,k++,cmax++);
if(cmax>max)
max = cmax,
pos = i;
j++;
}
j=0,i++;
}
cout<<"maxchar:"<<max<<endl;
return max;
}
//矩阵存储是否相等的向量,空间换时间
//算法复杂度m*n
int matricmaxchar(char *s,int m,char *t,int n){
int matrix[m][n];
int max=0;
for(int i=0;i<m;i++){
for(int j=0;j<n;j++){
if(s[i]==t[j]){
if(j >0 && i>0){
matrix[i][j] = matrix[i-1][j-1] + 1;
matrix[i][j] > max ? max = matrix[i][j]:NULL;
}else{
matrix[i][j] = 1;
}
}else{
matrix[i][j] = 0;
}
}
}
cout<<"matricmaxchar:"<<max<<endl;
return max;
}
int main(){
string s = "werasdfaswer";
string t = "asdfas";
int m = s.length();
int n = t.length();
char *s_str = (char *)s.c_str();
char *t_str = (char *)t.c_str();
maxchar(s_str,m,t_str,n);
matricmaxchar(s_str,m,t_str,n);
};