vector数组用at就报错说访问越界,用[]就没问题,求指教。
程序代码:
#include <iostream> #include <vector> using namespace std; class Manacher { public: string manach(const string &s) const; }; string Manacher::manach(const string &s) const { if(s.length()<0) return ""; string t("$#"); for(auto it=s.cbegin();it!=s.cend();++it) { t+=(*it); t+="#"; } vector<int> a(t.length(),0); int Max_r=0,id=0,res=0,res_len=0; for(int i=1;i<t.length();++i) { /*a.at(i)=Max_r>i?min(a.at(2*id-i),Max_r-i):1; while(t.at(i+a.at(i))==t.at(i-a.at(i))) ++a.at(i);*/ //这样写就会报错,说访问越界 a[i]=Max_r>i?min(a[2*id-i],Max_r-i):1;//这样写没问题 while(t[i+a[i]]==t[i-a[i]]) ++a[i]; if(Max_r<i+a.at(i)) { id=i; Max_r=i+a.at(i); } if(res<a.at(i)) { res=i; res_len=a.at(i); } } return s.substr((res-res_len)/2,res_len-1); } int main() { string s1("1221"); Manacher m; cout<<m.manach(s1)<<endl; return 0; }