热门标签 | 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环境下的配置与测试。 ... [详细]
  • 本文详细探讨了KMP算法中next数组的构建及其应用,重点分析了未改良和改良后的next数组在字符串匹配中的作用。通过具体实例和代码实现,帮助读者更好地理解KMP算法的核心原理。 ... [详细]
  • 本文详细介绍了Java中org.neo4j.helpers.collection.Iterators.single()方法的功能、使用场景及代码示例,帮助开发者更好地理解和应用该方法。 ... [详细]
  • 优化ListView性能
    本文深入探讨了如何通过多种技术手段优化ListView的性能,包括视图复用、ViewHolder模式、分批加载数据、图片优化及内存管理等。这些方法能够显著提升应用的响应速度和用户体验。 ... [详细]
  • 本文将介绍如何编写一些有趣的VBScript脚本,这些脚本可以在朋友之间进行无害的恶作剧。通过简单的代码示例,帮助您了解VBScript的基本语法和功能。 ... [详细]
  • Java 中 Writer flush()方法,示例 ... [详细]
  • 本文介绍如何利用动态规划算法解决经典的0-1背包问题。通过具体实例和代码实现,详细解释了在给定容量的背包中选择若干物品以最大化总价值的过程。 ... [详细]
  • 本文介绍了Java并发库中的阻塞队列(BlockingQueue)及其典型应用场景。通过具体实例,展示了如何利用LinkedBlockingQueue实现线程间高效、安全的数据传递,并结合线程池和原子类优化性能。 ... [详细]
  • 深入理解Cookie与Session会话管理
    本文详细介绍了如何通过HTTP响应和请求处理浏览器的Cookie信息,以及如何创建、设置和管理Cookie。同时探讨了会话跟踪技术中的Session机制,解释其原理及应用场景。 ... [详细]
  • 主要用了2个类来实现的,话不多说,直接看运行结果,然后在奉上源代码1.Index.javaimportjava.awt.Color;im ... [详细]
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社区 版权所有