Zadanie maturalne - prefiks palindrom

0

Witam,

mam problem z jednym zadanie o nazwie Prefiks Palindrom (c++). Jego polecenie brzmi: *Napis t jest prefiksem napisu s, jeśli istnieje taki napis y, że s=ty (czyli s jest złączeniem, inaczej mówiąc konkatenacją napisów t i y). Przy czym y może być słowem o zerowym rozmiarze. Napisz program, który dla podanego napisu znajdzie możliwie najdłuższy prefiks który jest palindromem. *

Tak więc dla wyrazu obok odpowiedzią będzie 3, dla wyrazu obobok - 5, a dla wyrazu stok - 1.
Mój program działa tylko w wypadku, gdy literki się nie pokrywają, tj. dla powyższych przykładów będzie działał, ale już dla oboko naliczy z jakiegoś powodu 7...

Proszę o pomoc.

#include <iostream>
#include <string>
using namespace std;
int main()
{
int wynik=0;
string s;
cin>>s;

for (int j=s.size()-1; j>0; j--)
{
for (int i=0; i<s.size(); i++)
{
if (s[j]==s[i]) wynik++;
else break;

}

}

wynik=2*wynik;
wynik++;

cout<<wynik;

return 0;

}

0

Sformatuj kod, nikt go nie przeczyta w takiej formie...

0
include <iostream>
#include <string>
using namespace std;
int main()
{
int wynik=0;
string s;
cin>>s;
for (int j=s.size()-1; j>0; j--)
{
for (int i=0; i<s.size(); i++)
{
if (s[j]==s[i]) wynik++;
else break;
}
}
wynik=2*wynik;
wynik++;
cout<<wynik;
return 0;
}
0

Tak szybko rzuciłem okiem, twoim problemem w tym algorytmie jest to, że sprawdzasz wyrazy od jego końców ( początek i koniec - to jest jeszcze dobrze ), ale zauważ, że pętla z "j" idzie od końca do początku zaś ta z "i" idzię od początku do końca. Czyli dany wyraz sprawdzasz 2 razy. przez co wynik ci wychodzi większy.

0
for (int j=s.size()-1; j>0; j--)
{
    for (int i=0; i<s.size(); i++)
    {
        if (s[j]==s[i]) w++;
        else {hm=0; break;}

    }
    if (hm!=0)
    {
        wynik=wynik+w;
    }
    hm=1;
}

w tym wypadku rzadko kiedy naliczy wynik, więc musi być inny sposób na sprawdzenie, czy to, co naliczam, jest palindromem```

1 użytkowników online, w tym zalogowanych: 0, gości: 1