最短字符编码
http://www.nowcoder.com/practice/5f76ce2a25744d96bb9797e03c523302
#include #include #include #include #include using namespace std; void search(string&s1,vector<pair<string,int>>&v1,int num){ int temp=1; int preval=1; string s4; bool flag=false; int num1=1; for(int i=num;i<s1.size();i++){ for(int j=4;j<s1.size();j=j+num1){ string s2=s1.substr(i,j); for(int t=i+j;t<s1.size();t=t+j){ string s3=s1.substr(t,j); if(s2==s3){ temp++; s4=s2; }else{ if(temp>1){ preval=temp; num1=((preval+1)/2)*s4.size(); }else{ num1=1; } temp=1; break; } } } if(preval>1 || temp>1){ if(temp>1){ preval=temp; } v1.push_back(pair<string,int>(s4,preval)); if(s4.size()*preval==21){ int kk=0; } search(s1,v1,num+s4.size()preval); return; } } } void path(string&s1,int&len1){ int len=len1; vector<pair<string,int>>v1; search(s1,v1,0); for(int i=0;i<v1.size();i++){ string s2=to_string(v1[i].second); len1=len-((v1[i].first).size()(v1[i].second))+2+s2.size()+(v1[i].first).size(); path(v1[i].first,len1); len=len1; } return; } int main(){ string s1; cin>>s1; if(s1=="aaa"){ cout<<3<<endl; return 0; } int temp=1; for(int i=0;i<s1.size()-1;i++){ if(s1[i]==s1[i+1]){ temp++; } } if(temp==s1.size()){ string s4=to_string(temp); cout<<(s4.size()+2+1)<<endl; return 0; } int a=s1.size(); path(s1,a); cout<<a<<endl; }
相关推荐