#include <bits/stdc++.h> using namespace std; int jz=257; long long m=10000000000007; int geths(char c){ return c-'a'+1; } vector<long long> getqzhs(string s){ vector<long long> v(s.size()+1,0); for(int i=1;i<=s.size();i++) v[i]=(v[i-1]*jz+geths(s[i-1]))%m; return v; } vector<long long> gethzhs(string s){ vector<long long> v(s.size()+1,0); long long jzs=1; for(int i=1;i<=s.size();i++){ v[i]=(v[i-1]+geths(s[s.size()-i])*jzs)%m; jzs*=jz; jzs%=m; } return v; } int main(){ int n=8; string s="11001011"; string s2=s; for(int i=0;i<s.size();i++) s2[i]='1'==s[i]?'0':'1'; int ans=0; for(int i=1;i<s.size();i++){//0~i-1 i~s.size()-1 for(int l=1;l<s.size();l++){//优化:循环改二分 if(i-l<0||i+l>s.size()) break; else{ //字符串截取费时,换成递推哈希值 string a=s.substr(i-l,l); string b=s2.substr(i,l); reverse(b.begin(),b.end()); if(a==b){ cout<<a<<" "; ans++; } } } } cout<<endl<<ans; return 0; } int main1458(){ string s="abcdabcdabcd"; while(cin>>s){ vector<long long> a=getqzhs(s),b=gethzhs(s); for(int i=1;i<=s.size();i++) if(a[i]==b[i]) cout<<i<<" "; cout<<endl; } return 0; } (责任编辑:admin) |