原题链接
题目大意
给定字符串,求出含有子序列 “love” 的字符串的最短长度.
解析
利用双指针算法,使 i 查找字符串中“l”所在位置 ,判断出“l”后在用 j 查找出 “e” 所在的位置,其中要定义两变量 o , v 判断是否符合 l o v e 的顺序。
AC代码
#include <iostream>
#include <algorithm>
#include <cmath>
#include <cstring>
#include <cstdio>
using namespace std;
typedef long long LL;
int main(){
int n; cin >> n;
string s; cin >> s;
int o=0,v=0,e=0,j;
int minn = 9999999;
for(int i = 0;i < n;i++) {
if(s[i] == 'l') {
j = i;
while(j < n && e == 0) {
if(s[j] == 'o' && v==0 && e==0) o = 1;
if(s[j] == 'v' && o && e==0) v = 1;
if(s[j] == 'e' && o && v) e = 1;
j++;
}
if(e == 1) minn = min(minn,j-i);
o=0,v=0,e=0;
}
}
cout << minn << endl;
return 0;
}