20.000 karaktere kadar bir dizede en büyük palindromu bulmak için soran bir sorunu çözmeye çalışıyorum. Her alt dizgeyi çalıştıran bir palindrom olup olmadığını kontrol etmeye çalıştım, ama açıkça çok yavaştı. Küçük bir müdavimin ardından bu güzel algoritmayı http://stevekrenzel.com/articles/longest-palnidrome buldum. Bunu uygulamaya çalıştım, ancak işe yaramayacağım. Ayrıca, verilen dize geçersiz karakterler içeriyor, bu yüzden onu yalnızca yasal karakterlere dönüştürmek ve tüm karakterler ile en uzun palindromu çıkarmak zorundayım.Dize uygulamasında en büyük palindromu bulma
int len = original.length();
int longest = 0;
string answer;
for (int i = 0; i < len-1; i++){
int lower(0), upper(0);
if (len % 2 == 0){
lower = i;
upper = i+1;
} else {
lower = i;
upper = i;
}
while (lower >= 0 && upper <= len){
string s2 = original.substr(lower,upper-lower+1);
string s = convert(s2);
if (s[0] == s[s.length()-1]){
lower -= 1;
upper += 1;
} else {
if (s.length() > longest){
longest = s.length();
answer = s2;
}
break;
}
}
}
ben kağıt üzerinde tam olarak bu algoritma kullanılarak denedim ve lütfen yardım çalıştı, işe alınamıyor:
İşte benim denemesi. Eğer gerekiyorsa İşte tam kod: http://pastebin.com/sSskr3GY
DÜZENLEME: Tamam
int longest = 0;
string answer;
string converted = convert(original);
int len = converted.length();
if (len % 2 == 0){
for (int i = 0; i < len - 1; i++){
int lower(i),upper(i+1);
while (lower >= 0 && upper <= len && converted[lower] == converted[upper]){
lower -= 1;
upper += 1;
}
string s = converted.substr(lower+1,upper-lower-1);
if (s.length() > longest){
longest = s.length();
answer = s;
}
}
} else {
for (int i = 0; i < len; i++){
int lower(i), upper(i);
while (lower >= 0 && upper <= len && converted[lower] == converted[upper]){
lower -= 1;
upper += 1;
}
string s = converted.substr(lower+1,upper-lower-1);
if (s.length() > longest){
longest = s.length();
answer = s;
}
}
}
Sorunlarım sabit yüzden, gayet iyi çalışıyor fakat dönüştürülen dize uzunluğu tek ise. Lütfen yardım et. Ben iki büyük hata görebilirsiniz
Belki bu soru http://codereview.stackexchange.com/ adresindedir. –