完整代码

#include<vector>
typedef long long ll;
using namespace std;
int main()
{
    int t;
    cin >> t;
    string a;
    while(t--)
    {
        int ans = 0;
        int l = -1, o = -1, v = -1, e = -1;
        cin >> a;
        for(int i = 0; i < a.size(); i++)
        {
            if(a[i] == 'L') l = i;
            else if(a[i] == 'O') o = i;
            else if(a[i] == 'V') v = i;
            else if(a[i] == 'E') e = i;
            int k = min(min(l,o),min(v,e));
            // 当k!=-1时,就证明love四个字母全部出现了
            if(k != -1) ans += (k + 1);
        }
        cout << ans << endl;
    }
}

递推关系

借助动态规划的思想 我们假设当字符串(不讲顺序)“love”的前面没有字符的时候,此时从前向后看,有一种提取方法 当“love”的前面有一个字符是,不管“love”后面的字符,与两种提取方法(第一个字符可取也可不取,所以两种) 以此类推

  1. 前面有两个字符时,所求字符串的最小下标是2,有三种提取方法
  2. 前面有三个字符时,所求字符串的最小下标是3,有四种提取方法

这下大家结合代码,就可以看懂了吧!