AtCoder ABC 049 C - 白日梦 (DP写法)

题目传送门:Here

Description

提供由小写字符构成的长度N的字符串S。
请将S分割成几个连续的字符串,并判断这些字符串是否能够全部变成“dream”、“dreamer”、“erase”、“eraser”。
1N105


在这里试试DP。

DP[i] ​ 对于字符串S的第一个 i 个字符,是否可以按满足条件进行区间分割

然后转变可以如下。

  • dp[i - 5] If = True and S[i-5:i]= "dream", dp[i]= True
  • dp[i-7]If = True and S[i-7:i]= "dreamer", dp[i]= True
  • dp[i-5]If = True and S[i-5:i]= "erase", dp[i]= True
  • dp[i-6]If = True and S[i-6:i]= "eraser", dp[i]= True

时间复杂度:O(N)

vector<string> strs = {"dream", "dreamer", "erase", "eraser"};
int main() {
    cin.tie(nullptr)->sync_with_stdio(false);
    string s; cin >> s;
    vector<bool>dp(s.size() + 1, false);
    dp[0] = true;
    for (int i = 1; i <= s.size(); ++i) {
        for (auto str : strs) {
            if (i >= str.size() &&
                    dp[i - str.size()] &&
                    s.substr(i - str.size(), str.size()) == str)
                dp[i] = true;
        }
    }
    if (dp[s.size()]) cout << "YES\n";
    else cout << "NO\n";
}
posted @   RioTian  阅读(89)  评论(0编辑  收藏  举报
编辑推荐:
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
阅读排行:
· Obsidian + DeepSeek:免费 AI 助力你的知识管理,让你的笔记飞起来!
· 分享4款.NET开源、免费、实用的商城系统
· 解决跨域问题的这6种方案,真香!
· 一套基于 Material Design 规范实现的 Blazor 和 Razor 通用组件库
· 5. Nginx 负载均衡配置案例(附有详细截图说明++)
历史上的今天:
2020-08-08 算法学习笔记:LCA问题
2020-08-08 在线算法、离线算法
2020-08-08 Codeforces 670C (离散化入门题)
2020-08-08 [kuangbin]专题九 连通图 题解+总结
2020-08-08 算法学习笔记:母函数详解
2020-08-08 0x62 图论-最小生成树
点击右上角即可分享
微信分享提示