我想知道如何做到這一點:查找最長的子字符串中的
string1= "cggt"
string2="ccgg"
的最大子string1
包含string2
只有一個「C」(string1
必須繼續string2
段一樣,如果string1
是「ccgt」,那麼返回應該是maxsubstring「cc」)。
更多例子:
string1:"EggAndApple"
string2:"AppleEggAnd"
我想找到最大子在string1
包含string2
應該是「蘋果」(必須開始的string2
開始)
但我的代碼下面會給「EggAnd」作爲結果
我搜索了一些解決方案返回結果maxsubstring是「cgg」。 代碼是
int findOverlap(std::string str1, std::string str2)
{
if(str1.empty() || str2.empty())
{
return 0;
}
int *curr = new int [str1.size()];
int *prev = new int [str1.size()];
int *swap = nullptr;
int maxSubstr = 0;
for(int i = 0; i<str2.size(); ++i)
{
for(int j = 0; j<str1.size(); ++j)
{
if(str1[j] != str2[i])
{
curr[j] = 0;
}
else
{
if(i == 0)
{
curr[j] = 1;
}
else
{
curr[j] = 1 + prev[j-1];
}
if(maxSubstr < curr[j])
{
maxSubstr = curr[j];
}
}
}
swap=curr;
curr=prev;
prev=swap;
}
delete [] curr;
delete [] prev;
return maxSubstr;
}
如何修改這個代碼來滿足我的要求,或者如何編寫新的代碼段,以解決我的問題?
這是什麼類? – jeremy
對於「cggt」&「ccgg」,最大子字符串是3,而不是1(兩個字符串中都包含「cgg」)。我真的不明白你想要達到什麼目的,你能否提供一些子串的其他例子? – Constantin
是的,「cgg」包含在兩個字符串中,我編輯了這個問題。我想要的是在字符串1中找到字符串2中最長的連續字符串片段。就像字符串1「eggandapple」string2「appleeggand」,我的預期回報應該是「apple」,但是我的代碼會找到「eggand」。返回的字符串必須以string2的開頭開頭。 – user2840454