希望大佬帮我解析一下,感激不尽!!!!
#include<bits/stdc++.h>
using namespace std;
int num[10];
int dp[3010][10];
int main()
{
string s;
cin>>s;
s=' '+s;
for(int i=s.size()-1;i>=0;i--)
{
for(int j=0;j<=9;j++) dp[i][j]=num[j];
if(i!=0)num[s[i]-'a']=i;
}
vector<char> v;
v.push_back('a');
v.push_back('b');
v.push_back('c');
v.push_back('d');
v.push_back('e');
v.push_back('f');
v.push_back('g');
v.push_back('h');
v.push_back('i');
int ans=0;
do{
int flag=0;
for(int i=0;i<9;i++)
{
flag=dp[flag][v[i]-'a'];
if(flag==0) {ans--;break;}
}
ans++;
}while(next_permutation(v.begin(),v.end()));
cout<<ans<<endl;
return 0;
}