当前位置: 首页 > 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);
    }

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

http://www.dtcms.com/a/13208.html

相关文章:

  • 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语音大模型本地部署
  • Leetcode 3306. Count of Substrings Containing Every Vowel and K Consonants II
  • 针对考研的C语言学习(定制化快速掌握重点2)
  • Zabbix 7.0 图表中文乱码问题处理步骤
  • u2net网络模型训练自己数据集
  • 【Linux】包管理器、vim详解及简单配置
  • 9月27日,每日信息差
  • MATLAB案例 | 沪深股市收益率的二元Copula模型
  • sql中的regexp与like区别
  • 三位数排序
  • PDF对话RAG应用开发实战