完整代码
#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”后面的字符,与两种提取方法(第一个字符可取也可不取,所以两种) 以此类推
- 前面有两个字符时,所求字符串的最小下标是2,有三种提取方法
- 前面有三个字符时,所求字符串的最小下标是3,有四种提取方法
这下大家结合代码,就可以看懂了吧!