当前位置: 首页 > news >正文

leetcode每日一题day14(24.9.24)——字符串最多的子序列


思路:对于应该首要和贡献联系起来,对于什么是贡献呢,即在某种情况下,会贡献出多少种,符合要求的结果,此题属于较为基础的,对于text中的一个字符如果是非pattern中的元素,则对结果无任何影响,如果出现pattern[0]则需考虑后方有多少个pattern[1],如果出现pattern[1]时则忽略,因为其在patern[0]中考虑过了,不能起点到终点算一次 ,终点到起点又算一次,对于最后的添加一个,也是差不多的既然可以随便放,当然选择放最边上,至于放哪边,则看pattern([0]/[1])谁多。

此时便容易联想到

        方案一从后方开始,遍历如果出现pattern[1]则计数一次,当某时刻遍历到pattern[0]时则在结果累加计数器的值,含义为对结果贡献了计数器组子序列,同时pattern[0]也需计数,用以最后的操作。

        对于方案一寻找漏洞:各有的的操作表面风平浪静,仔细一想,出现pattern[0]如果也同时出现了pattern[1],即pattern两字符相等,此时先后顺序应该怎么处理呢,仔细一想应该是先累加计数器的值,再对pattern进行计数的,思考过程忽略。

代码

long long maximumSubsequenceCount(string text, string pattern) {
        int len = text.length(), cut_0 = 0, cut_1 = 0;
        long int ret = 0;
        for (int i = 0; i < len; i++) {
            //先更新贡献,再继续计数,主要是为了应对pattern相同,不相同则无所谓先后,不存在同时满足情况。
            if (text[i] == pattern[1]) { // 如果是结尾元素,则计算贡献
                ret += cut_0;
                cut_1++;
            }
            if (text[i] == pattern[0]) { // 如果是起点元素,则进行计数
                cut_0++;
            }
        }
        return ret + max(cut_0, cut_1);
    }

结语:详细提到了心路历程,任然是大胆猜想,小心求证,在确定看下情况下尽可能考虑到更多的特殊情况。

相关文章:

  • git commit -am 仅提交已修改文件
  • 【Golang】Go语言字符串处理库--strings
  • NAND Flash虚拟层坏块管理机制
  • 如何选择适合的AI训练数据集进行人工智能训练
  • 计算机基础知识
  • 数学建模研赛总结
  • 在 C++ std::set 中如何利用不同类型的值进行搜索?
  • 吐槽一次qiankun微前端的框架
  • 【从零开始实现stm32无刷电机FOC】【实践】【7.1/7 硬件设计】
  • Nginx部署前端Vue项目的深度解析
  • 【计算机网络最全知识点问答】第二章 物理层
  • 828华为云征文|部署在线论坛网站 Flarum
  • 为了学习Python熬夜部署了Jupyter Notebook 6.x
  • 使用 Nexus 代理 Docker Hub 的配置指南
  • python爬虫初体验(三)——将网页数据导出csv和excel文件
  • Python快速上手爬虫的7大技巧
  • 回归预测 | Matlab基于SO-ESN蛇群算法优化回声状态网络多输入单输出回归预测
  • Python字符串基础和处理
  • CSS 效果:实现动态展示双箭头
  • fish-speech语音大模型本地部署
  • 中国科协发声:屡禁不止的奇葩论文再次敲响学风建设警钟
  • 巴基斯坦称成功拦截印度导弹,空军所有资产安全
  • 国家主席习近平会见斯洛伐克总理菲佐
  • 江西暴雨强对流明显,专家:落雨区高度重叠,地质灾害风险高
  • 国家税务总局泰安市税务局:山东泰山啤酒公司欠税超536万元
  • 大风暴雨致湖南岳阳县6户房屋倒塌、100多户受损