我正在尝试在http://ideone.com/YisrPH处运行此代码。
我在这个函数中得到一个SIGSEGV -
int minDistance(string A, string B) {
cout << "HEUI";
int m = A.length();
int n = B.length();
cout << "H";
int i, j;
cout << "H";
// int dist[m+1][n+1];
// for(i=0;i<=m;i++)
// for(j=0;j<=n;j++)
// dist[i][j] = 0;
cout << "H";
vector<vector<int>> d(m+1, vector<int>(n+1,0));
cout << "H";
for(i=0;i<=m;i++) {
for(j=0;j<=n;j++) {
if(i==0) d[i][j] = j;
if(j==0) d[i][j] = i;
else if(A[i-1]==B[j-1]) d[i][j] = d[i-1][j-1];
else d[i][j] = 1 + min(d[i-1][j], d[i][j-1], d[i-1][j-1]);
// cout << dist[i][j] << i << j << endl;
}
}
// cout << dist[m][n];
return d[m][n];
}
正如您将注意到的,我正在使用向量来构建2D数组。如果我替换它以使用普通的2D数组,它会运行,但结果有时是正确的,有时是垃圾。
答案 0 :(得分:3)
您正在访问array.Consider i=0
和j=1
for(i=0;i<=m;i++)
{
for(j=0;j<=n;j++)
{
if(i==0)
d[i][j] = j;
if(j==0)
d[i][j] = i;
else if(A[i-1]==B[j-1]) //A[i-1]=A[0-1]=A[-1]
d[i][j] = d[i-1][j-1];
你可以试试这个
if(i==0 || j==0)
d[i][j] = (i==0?j:i);
else if(A[i-1]==B[j-1])
...
或者@mch在评论中指出的更好
if(i==0 || j==0)
d[i][j] = i+j;
else if(A[i-1]==B[j-1])
...