インタビュービットで一致するワイルドカードパターンでセグメンテーションフォルトが発生しましたが、今は回答が得られません。 私はDPを使用してタスクを解決しています。 私が問題にセグメンテーションフォルト リンクの理由を把握助けてください - ここでhttps://www.interviewbit.com/problems/regular-expression-match/ワイルドカードパターンマッチングのセグメンテーションフォルト
はC++でセグメンテーションフォルトを取得し、私のソリューションです。
あなたはデータ上の任意のカスタムアクションを必要としないのでbool** dp = new bool*[n+1];
for(bool i = 0; i < n+1; ++i)
dp[i] = new bool[m+1];
に動的メモリを割り当てる必要が
int Solution::isMatch(const string &s, const string &p) {
int n=s.size(),m=p.size();
bool dp[n+1][m+1];
for(int i=0;i<=n;i++)for(int j=0;j<=m;j++)dp[i][j]=false;
dp[0][0]=true;
for(int j=1;j<=m;j++)
if(p[j-1]=='*')dp[0][j]=dp[0][j-1];
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
if(s[i-1]==p[j-1] || p[j-1]=='?')dp[i][j]=dp[i-1][j-1];
else if(p[j-1]=='*')
{
int v1=dp[i][j-1],v2=0;// Not Using
v2=(dp[i-1][j]|dp[i][j-1]);
dp[i][j]=(v1|v2);
}
else dp[i][j]=false;
}
}
return dp[n][m];
}
は実行時に表示されているようですが、エラーの原因となる文字列値は何ですか? –
'bool dp [n + 1] [m + 1];'これは正当なC++ではなく、C++の配列は、コンパイル時の式をエントリの数として宣言する必要があります。代わりに 'std :: vector'を使用してください。標準的なC++にするだけでなく、問題をデバッグするのに役立ちます。なぜなら、' vector'は境界から外れた場合に例外をスローする 'at()'関数を持っているからです。 )。 – PaulMcKenzie
@EmrahIzci文字列の値が指定されていません! –