题目:Summer Trip
#include<bits/stdc++.h>
using namespace std;
#define ll long long
string s;
vector<int>ve[30]; //v[i][j]表示记录序列中第j个i字母的位置
ll fun(int a,int b){
ll res=0;
int lena=ve[a].size();
int lenb=ve[b].size();
int j=0;
for(int i=0;i<lena;i++){
while(j<lenb && ve[b][j]<ve[a][i] ) j++; //这里的判断条件不能反过来,否则会访问非法内存
if(j==lenb) break;
if(ve[a][i+1]>ve[b][j] || i+1==lena) res++;
}
return res;
}
int main(){
cin >> s;
int len=s.size();
for(int i=0;i<len;++i){
ve[ s[i]-'a' ].push_back(i);
}
ll ans=0;
for(int i=0;i<26;++i){
for(int j=0;j<26;++j){
if(i==j) continue;
ans+=fun(i,j);
}
}
cout << ans ;
return 0;
}