题目:
找出字符串中权值和为0且首位字母相同的子串个数
题解:
计算前缀和。
#include<iostream>
#include<string>
#include<map>
using namespace std;
long long alpha[26];
string str;
int main(){
for(long long i=0;i<26;i++){
cin>>alpha[i];
}
cin>>str;
long long len=str.length();
long long allans=0;
for(char ch='a';ch<='z';ch++){
map<long long,long long> mmm;
long long ans=0;
for(long long i=0;i<len;i++){
if(str[i]==ch){
allans+=mmm[ans];
ans+=alpha[str[i]-'a'];
mmm[ans]++;
}
else ans+=alpha[str[i]-'a'];
}
}
cout<<allans<<endl;
}