题解 | #苦逼的单身狗#

苦逼的单身狗

https://ac.nowcoder.com/acm/problem/14350

完整代码

#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,有四种提取方法

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

全部评论

相关推荐

不愿透露姓名的神秘牛友
08-08 18:20
职场水母:这题思路是什么,我目前想的一个暴力方法就是先把这个链表遍历一遍,用哈希表存储出现次数,然后再根据哈希表来一个一个删除节点,
点赞 评论 收藏
分享
评论
2
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务