C++, 247247 150 bytes
-97 thanks to ceilingcat
#include<string> #define G string #define R return#import<map> usingint P(std::G;int I(Gstring s){for(int i= 0;i<s.size();++i)ifi=0,j,q,r=-1;for(s[i];s[i++]*!=s[s.size()-~r;r=q?r:i-1])R 0;R 1;}G Sfor(G s,int i){Rauto st=s.substr(0j=q=0,i)+s.substr(i+1);}int P(G s){for(int i=0;i<s.size(-1);++i+&s[i];t[j];){if(Iq|=t[j]-*(Send(s,i)t)-++j)R;return i+1;}R-1;r;} Test code example :
std::cout << P("RACERCAR") << '\n';