64,654
社区成员
发帖
与我相关
我的任务
分享
#include<windows.h>
#include<iostream>
#include<cstring>
#include<iomanip>
#include<tchar.h>
template<typename T>
class matrix{
int row;
int col;
T* p;
public:
explicit matrix(int r=0,int c=0):row(r),col(c),p(new T[row*col]){}
T& operator()(int i,int j){
return *(p+i*col+j);
}
~matrix(){
if(p){
delete []p;
}
}
};
template<typename charT>
int LCS(const charT * s1,const charT * s2){
matrix<int> matri(1+lstrlen(s2),1+lstrlen(s1));
for(int i=0;i<1+lstrlen(s2);++i){
for(int j=0;j<1+lstrlen(s1);++j){
if(i==0 || j==0){
matri(i,j)=0;
}
else{
if(s1[j-1]==s2[i-1]){
matri(i,j)=matri(i-1,j-1)+1;
}
else{
matri(i,j)=max(matri(i-1,j),matri(i,j-1));
}
}
std::cout<<std::setw(3)<<matri(i,j);
}
std::cout<<std::endl;
}
return matri(lstrlen(s2),lstrlen(s1));
}
int main(){
TCHAR s1[]=TEXT("一个萝卜一个坑");
TCHAR s2[]=TEXT("萝个坑");
std::cout<<LCS<TCHAR>(s1,s2)<<std::endl;
system("pause");
return 0;
}
在vs2010上编译通过且运行了,s1的长度是7,s2的长度是3
现在我想显示出来的字呈现不同的颜色怎么办?、?
比如匹配完成之后
一个萝卜一个坑
萝个坑
#include<windows.h>
#include<iostream>
#include<cstring>
#include<iomanip>
#include<tchar.h>
template<typename charT>
int LCS(const charT * s1,const charT * s2){
int matri[1+lstrlen(s2)][1+lstrlen(s1)];
for(int i=0;i<1+lstrlen(s2);++i){
for(int j=0;j<1+lstrlen(s1);++j){
if(i==0 || j==0){
matri[i][j]=0;
}
else{
if(s1[j-1]==s2[i-1]){
matri[i][j]=matri[i-1][j-1]+1;
}
else{
matri[i][j]=std::max(matri[i-1][j],matri[i][j-1]);
}
}
std::cout<<std::setw(3)<<matri[i][j];
}
std::cout<<std::endl;
}
return matri[lstrlen(s2)][lstrlen(s1)];
}
int main(){
TCHAR s1[]="一个萝卜一个坑";
TCHAR s2[]="萝个坑";
std::cout<<LCS<TCHAR>(s1,s2)<<std::endl;
return 0;
}