
找规律,思维
先考虑不重复的情况abcde
在考虑重复的情况ababc
写一下找出规律就可以发现结论了
看代码
#include<iostream>
#include <string>
using namespace std;
int pre[100];
int main(){
string str;
cin >> str;
int len = str.length();
str = " " + str;
long long ans = 0;
for(long long i = 1;i<=len;i++){
ans += (i - pre[str[i]-'a']) * (len - i + 1); // *前面部分表示去重,pre记录上一次相同的字符出现的位置
pre[str[i]-'a'] = i;
}
cout << ans << endl;
return 0;
}
博客探讨了一个关于字符串排列的算法问题,首先考虑字符不重复的情况如abcde,然后扩展到考虑重复字符如ababc。提供的C++代码通过维护前缀数组pre来计算不重复子串的数量,从而得出所有可能排列的总数。该算法涉及字符串处理和动态规划思想。
910

被折叠的 条评论
为什么被折叠?



