#include<iostream>
#include<string>
using namespace std;
int LCS(string a,string b,int n);
int main()
{
int N;
cin>>N;
if(0<N&&N<100)
{
for(int i=0;i<N;i++)
{
string s;
cin>>s;
if(s.length()<1000)
{
string ds;
for(int j=0,k=s.length()-1;j<s.length();j++,k–)
{
ds[j]=s[k];
}
int n=s.length();
int l=LCS(s,ds,n);
cout<<s.length()-l<<endl;
}
}
}
return 0;
}
int LCS(string *a,string *b,int n)
{
int s[1000][1000]={0};
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
if(a[i-1]==b[j-1])
s[i][j]=s[i-1][j-1]+1;
if(a[i-1]!=b[j-1])
{
if(s[i][j-1]>s[i-1][j])
s[i][j]=s[i][j-1];
else
s[i][j]=s[i-1][j];
}
}
}
return s[n][n];
}
#include<string>
using namespace std;
int LCS(string a,string b,int n);
int main()
{
int N;
cin>>N;
if(0<N&&N<100)
{
for(int i=0;i<N;i++)
{
string s;
cin>>s;
if(s.length()<1000)
{
string ds;
for(int j=0,k=s.length()-1;j<s.length();j++,k–)
{
ds[j]=s[k];
}
int n=s.length();
int l=LCS(s,ds,n);
cout<<s.length()-l<<endl;
}
}
}
return 0;
}
int LCS(string *a,string *b,int n)
{
int s[1000][1000]={0};
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
if(a[i-1]==b[j-1])
s[i][j]=s[i-1][j-1]+1;
if(a[i-1]!=b[j-1])
{
if(s[i][j-1]>s[i-1][j])
s[i][j]=s[i][j-1];
else
s[i][j]=s[i-1][j];
}
}
}
return s[n][n];
}
解决方案
10
代码功能归根结底不是别人帮本人看或讲解或注释出来的;而是被本人静下心来花足够长的时间和精力亲自动手单步或设断点或对执行到某步获得的中间结果显示或写到日志文件中一步一步分析出来的。
提醒:再牛×的老师也无法代替学生本人领悟和上厕所!
单步调试和设断点调试(VS IDE中编译连接通过以后,按F10或F11键单步执行,按Shift+F11退出当前函数;在某行按F9设断点后按F5执行停在该断点处。)是程序员必须掌握的技能之一。
提醒:再牛×的老师也无法代替学生本人领悟和上厕所!
单步调试和设断点调试(VS IDE中编译连接通过以后,按F10或F11键单步执行,按Shift+F11退出当前函数;在某行按F9设断点后按F5执行停在该断点处。)是程序员必须掌握的技能之一。
20
你这个写法有问题,赋值不能这样
你在for循环后,加一句cout << ds << endl;就知道问题了
而且LCS的声明和实现不一致
你在for循环后,加一句cout << ds << endl;就知道问题了
而且LCS的声明和实现不一致