最长的常见子字错误结果
longest common subword incorrect result
我一直在尝试编写一个程序来计算两个字符串共有的最长的公共连续序列(或子词)。代码没有任何语法错误,但每次我得到胡言乱语的随机结果,如237743等,希望有人能找出我哪里出错了。例如如果我输入第一个单词作为"堆栈",第二个单词作为"堆栈溢出",它应该给出 5 的输出(常用字=堆栈,长度 5),但它给了我"2752053"
#include <iostream>
using namespace std;
int getlcw(char arr1[],char arr2[])
{
u=sizeof(arr1)/sizeof(arr1[0]);
v=sizeof(arr2)/sizeof(arr2[0]);
if(u==0||v==0)
{ cout<<"fail";
return 0;
}
int lcw[u+1][v+1]; \1 extra row and column to indicate word has ended , no chance for subword
int maxlcw=0;
for(int i=0;i<u+1;++i) \intialise last row and col to 0
{
lcw[i][v+1]=0;
}
for(int i=0;i<v+1;++i)
{
lcw[u+1][i]=0;
}
for(int i=u;i>=0;--i)
{
for(int j=v;j>=0;--j)
{
if(arr1[j]==arr2[i])
lcw[i][j]=1+(lcw[i+1][j+1]);
else
lcw[i][j]=0;
if(lcw[i][j]>maxlcw)
maxlcw=lcw[i][j];
}
}
return maxlcw;
}
int main()
{ int x,y;
cout<<"enter size of word 1n";
cin>>x;
char arr1[x];
cout<<"enter size of word 2n";
cin>>y;
char arr2[y];
cout<<"word 1n";
for(int i=0;i<x;++i)
{
cin>>arr1[i];
}
cout<<"word 2n";
for(int j=0;j<y;++j)
{
cin>>arr2[j];
}
int ans=getlcw(arr1,arr2);
cout<<ans;
cin>>x;
}
这是我从哪里得到算法的想法的链接 -
https://www.iarcs.org.in/inoi/online-study-material/topics/dp-classics.php
您可以通过两种方式解决它,请查看它:
自上而下的方法:
int getlcw(char arr1[],char arr2[])
{
u=sizeof(arr1)/sizeof(arr1[0]);
v=sizeof(arr2)/sizeof(arr2[0]);
if(u==0||v==0)
{ cout<<"fail";
return 0;
}
int lcsw[u+1][v+1]; \1 extra row and column to indicate word has ended , no chance for subword
int maxlcw=0;
for(int i=0; i<u+1;i++)
{
for(j=0; j<v+1; j++)
{
if(i == j) lcsw[i][j] = 0;
if(arr1[i]!= arr2[j]) lcsw[i][j] = 0;
else
{
lcsw[i][j] = 1+lcsw[i-1][j-1];
maxlcw= max(maxlcw, lcsw[i][j]);
}
}
}
return maxlcw;
}
自下而上 当你在尝试:
int getlcw(char arr1[],char arr2[])
{
u=sizeof(arr1)/sizeof(arr1[0]);
v=sizeof(arr2)/sizeof(arr2[0]);
if(u==0||v==0)
{ cout<<"fail";
return 0;
}
int lcsw[u+1][v+1]; \1 extra row and column to indicate word has ended , no chance for subword
int maxlcw=0;
for(int i=u;i>=0;i--)
{
for(int j=v;j>=0;j--)
{
if(i == j) lcsw[i][j] = 0;
if(arr1[i]!= arr2[j]) lcsw[i][j] = 0;
else
{
lcsw[i][j] = 1+lcsw[i+1][j+1];
maxlcw= max(maxlcw, lcsw[i][j]);
}
}
}
}
相关文章:
- 如何修复循环中的错误产生的错误结果?
- 添加可变参数函数的错误结果
- 使用特征 3 线性系统求解器的错误结果
- 按位包含 OR 的错误结果
- 如果我将索引变量更改为零,并且合并函数中的k = 0,则获得合并排序的错误结果
- STD :: FPCLASSIFY的错误结果使用Valgrind进行长时间的双重双重结果
- 视觉工作室的错误结果
- 将C#struct传递给C 不受管理的DLL返回错误结果
- 最长的常见子字错误结果
- 华氏度到摄氏度的错误结果
- UE4中简单坐标变换的错误结果
- 记忆错误结果的说明[编译器行为]
- 如何解决错误PRJ0002:错误结果 -1073741515从"cl.exe"返回?
- 错误 PRJ0002:错误结果 -1073741515 从"C:\Program Files\Microsoft Visual Studio 9.0\VC\bin\cl.
- glGetUniformLocation OpenGL ES 2.0(在ipad 3 iOS 7.0.3上返回错误结果)
- 在模板函数中调用std::for_each时出现错误结果
- 使用copy和back_inserter将矢量附加到其自身时出现错误结果
- CUDA 线程在全局内存中的私有位置写入时出现错误结果
- 来自 c++ 代码的错误结果
- 使用浮点值和铸造的算术运算的错误结果 - 差异很大,我想这不是准确值的情况(429497)?