参考:https://blog.youkuaiyun.com/tzasd89812/article/details/7386815
#include <iostream>
using namespace std;
int f(int i,int k)
{
/*以第i个字符开头,长度为k的字符的升序字符个数*/
int sum=0;
if(k==1)
return 1;
for(int j=i+1; j<=26; j++)
sum+=f(j,k-1);
return sum;
}
//求第i个字母开头,长度为k的升序排列字符数
int g(int k)
{
//长度为k的字符串长度
int sum=0;
for(int i=1; i<=26; i++)
{
sum+=f(i,k);
}
return sum;
}
int calculate(string s)
{
int sum=0;
int k=s.length ();
for(int i=1; i<k; i++)
sum+=g(i);
int h=s[0]-'a'+1;;//第一个字母
for(int i=1; i<h; i++)
sum+=f(i,k);
for(int i=1,temp=h; i<k; i++)
{
int n=s[i]-'a'+1;
int length=k-i;//获取此时的长度
for(int j=temp+1; j<n; j++)
sum+=f(j,length);
temp=n;
}
return sum+1;
}
int main()
{
string s;
s="b";
cout<<calculate(s)<<endl;
cout << "Hello world!" << endl;
return 0;
}