热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

LeetCode特定字符序列计数

本文探讨了如何计算一个仅包含字符‘5’、‘2’和‘0’的字符串中,不同位置的‘520’子序列的数量。通过动态规划的方法,逐步解析算法的实现。

本文旨在解决一个特定的问题:给定一个仅由字符‘5’、‘2’和‘0’组成的字符串,计算其中不同位置的‘520’子序列的数量。

例如,对于字符串“552200”,存在8个不同的‘520’子序列。

问题分析

解决这一问题的关键在于利用动态规划的思想。我们定义三个变量:sum5、sum2和sum0,分别用于记录以‘5’、‘2’和‘0’结尾的有效子序列的数量。

  • 当遇到字符‘5’时,它可以直接作为新子序列的开始,因此sum5增加1。
  • 当遇到字符‘2’时,它可以与之前所有以‘5’结尾的子序列组合形成新的‘52’子序列,因此sum2更新为sum2 + sum5。
  • 当遇到字符‘0’时,它可以与之前所有以‘2’结尾的子序列组合形成新的‘520’子序列,因此sum0更新为sum0 + sum2。

最终,sum0将包含所有可能的‘520’子序列的数量。

代码实现

int findOccurrences(string S) { int sum5 = 0, sum2 = 0, sum0 = 0; for (char c : S) { switch (c) { case '5': sum5++; break; case '2': sum2 += sum5; break; case '0': sum0 += sum2; break; } } return sum0; }

扩展问题

如果字符串中还包含通配符‘?’,它可以代表‘5’、‘2’或‘0’中的任何一个。在这种情况下,我们需要调整算法,确保每个‘?’都被正确处理。

具体来说,当遇到‘?’时,我们应该按如下顺序处理:

  1. 首先考虑‘?’作为‘0’,更新sum0。
  2. 然后考虑‘?’作为‘2’,更新sum2。
  3. 最后考虑‘?’作为‘5’,更新sum5。

这种顺序确保了每个‘?’只被当作一个字符处理,避免了重复计算。

int findOccurrencesWithWildcard(string S) { int sum5 = 0, sum2 = 0, sum0 = 0; for (char c : S) { switch (c) { case '5': sum5++; break; case '2': sum2 += sum5; break; case '0': sum0 += sum2; break; case '?': sum0 += sum2; sum2 += sum5; sum5++; break; } } return sum0; }

推荐阅读
  • 本文详细介绍了如何构建一个高效的UI管理系统,集中处理UI页面的打开、关闭、层级管理和页面跳转等问题。通过UIManager统一管理外部切换逻辑,实现功能逻辑分散化和代码复用,支持多人协作开发。 ... [详细]
  • 本文详细介绍了Akka中的BackoffSupervisor机制,探讨其在处理持久化失败和Actor重启时的应用。通过具体示例,展示了如何配置和使用BackoffSupervisor以实现更细粒度的异常处理。 ... [详细]
  • 本文介绍了如何在C#中启动一个应用程序,并通过枚举窗口来获取其主窗口句柄。当使用Process类启动程序时,我们通常只能获得进程的句柄,而主窗口句柄可能为0。因此,我们需要使用API函数和回调机制来准确获取主窗口句柄。 ... [详细]
  • 本文探讨了如何在给定整数N的情况下,找到两个不同的整数a和b,使得它们的和最大,并且满足特定的数学条件。 ... [详细]
  • 本文探讨了如何优化和正确配置Kafka Streams应用程序以确保准确的状态存储查询。通过调整配置参数和代码逻辑,可以有效解决数据不一致的问题。 ... [详细]
  • PHP 5.5.0rc1 发布:深入解析 Zend OPcache
    2013年5月9日,PHP官方发布了PHP 5.5.0rc1和PHP 5.4.15正式版,这两个版本均支持64位环境。本文将详细介绍Zend OPcache的功能及其在Windows环境下的配置与测试。 ... [详细]
  • PyCharm中配置Pylint静态代码分析工具
    本文详细介绍如何在PyCharm中配置和使用Pylint,帮助开发者进行静态代码检查,确保代码符合PEP8规范,提高代码质量。 ... [详细]
  • 探讨如何通过编程技术实现100个并发连接,解决线程创建顺序问题,并提供高效的并发测试方案。 ... [详细]
  • 本文将介绍如何编写一些有趣的VBScript脚本,这些脚本可以在朋友之间进行无害的恶作剧。通过简单的代码示例,帮助您了解VBScript的基本语法和功能。 ... [详细]
  • 本题探讨了一种字符串变换方法,旨在判断两个给定的字符串是否可以通过特定的字母替换和位置交换操作相互转换。核心在于找到这些变换中的不变量,从而确定转换的可能性。 ... [详细]
  • Java 中 Writer flush()方法,示例 ... [详细]
  • 本文介绍了如何使用 Spring Boot DevTools 实现应用程序在开发过程中自动重启。这一特性显著提高了开发效率,特别是在集成开发环境(IDE)中工作时,能够提供快速的反馈循环。默认情况下,DevTools 会监控类路径上的文件变化,并根据需要触发应用重启。 ... [详细]
  • 技术分享:从动态网站提取站点密钥的解决方案
    本文探讨了如何从动态网站中提取站点密钥,特别是针对验证码(reCAPTCHA)的处理方法。通过结合Selenium和requests库,提供了详细的代码示例和优化建议。 ... [详细]
  • Java 中的 BigDecimal pow()方法,示例 ... [详细]
  • 本文探讨了Hive中内部表和外部表的区别及其在HDFS上的路径映射,详细解释了两者的创建、加载及删除操作,并提供了查看表详细信息的方法。通过对比这两种表类型,帮助读者理解如何更好地管理和保护数据。 ... [详细]
author-avatar
手机用户2502911483
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有