寻找 love
Description
给你一个字符串,需要你找出有多少个"love"子序列,每个字母只能用一次。
Input
一个字符串,长度小于200001
Output
字符串中,含有love子串的个数。
Sample Input 1
lovlovee
Sample Output 1
2
#include <iostream>
#include <string>
using namespace std;
const int maxn = 200000;
int L[maxn], O[maxn], V[maxn], E[maxn];
int main(){
string arr;
cin >> arr;
int l = 0, o = 0, v = 0, e = 0;
for(int i = 0; i < arr.length(); i++){
if(arr[i] == 'l'){
L[l++] = i;
}
else if(arr[i] == 'o'){
O[o++] = i;
}
else if(arr[i] == 'v'){
V[v++] = i;
}
else if(arr[i] == 'e'){
E[e++] = i;
}
}
int i1 = 0, i2 = 0, i3 = 0, i4 = 0, ans = 0;
while(i1 < l && i2 < o && i3 < v && i4 < e){
while(L[i1] > O[i2] && i2 < o){ //如果不匹配就一直执行循环
i2++;
}
if(i2 >= o){
break;
}
while(O[i2] > V[i3] && i3 < v){ //如果不匹配就一直执行循环
i3++;
}
if(i3 >= v){
break;
}
while(V[i3] > E[i4] && i4 < e){ //如果不匹配就一直执行循环
i4++;
}
if(i4 >= e){
break;
}
ans++;
i1++;
i2++;
i3++;
i4++;
//不能重复使用字母
}
cout << ans << endl;
return 0;
}