0
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
int findpali (string s,int dp[][100],int st, int e);
int main (void)
{
string s;
cin>>s;
int dp[100][100];
for (int i = 0; i < 100; i++)
for (int j = 0; j < 100; j++)
dp[i][j] = -1;
int out = findpali(s,dp,0,s.length()-1);
cout<<out<<"\n";
return 0;
}
int findpali (string s,int dp[][100],int st, int e) // st ->starting position, e -> ending position
{
if (s.length() == 1)
{
dp[st][e] = 1;
return 1;
}
else if (s.length()==2 && s[st] == s[e])
{
dp[st][e] = 2;
return 2;
}
else if (dp[st][e] != -1)
return dp[st][e];
else if (s[st] == s[e])
{
dp[st][e] = findpali(s.substr(st+1,s.length()-2),dp,st+1,e-1)+2;
return dp[st][e];
}
else
{
dp[st][e] = max(findpali(s.substr(st,s.length()-1),dp,st,e-1),findpali(s.substr(st+1,s.length()-1),dp,st+1,e));
return dp[st][e];
}
}
上面的函數查找給定字符串中最長迴文的長度。我已經將給定的數組dp
初始化爲-1
,然後我將不同的值存儲在數組中。但是,當我輸入一個像ABCD
這樣的字符串時,它說出了異常並且中止。這可能是什麼原因?謝謝!爲什麼我在這個函數中出現越界異常?
原因可能是您索引值過大的陣列。使用調試器找出在哪裏。 – yizzlez
'我已經將給定的數組dp初始化爲-1,然後我將不同的值存儲在數組中.'沒有人知道'st'和'e'的值是多少。我們甚至不知道'dp'的真正維度是什麼。不用說,這個功能失敗的方式有很多。 – PaulMcKenzie
也添加了'main'。 :) –