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

回文子串的数量[寻找回文子串的完整思路过程]

寻找回文子串的完整思路过程

  • 前言
  • 一、回文串的数量
  • 二、动态规划
    • 1、完整思考过程
    • 2、go
  • 总结
  • 参考文献

前言

回文字符串,就是从左遍历和从右遍历的字符是相同顺序的,转换一下,就是该字符串是对称的。寻找回文子串面临两个直接的问题,1-如何确定一个子串?2-如何判断该子串是否为回文串?

一、回文串的数量

在这里插入图片描述

二、动态规划

1、完整思考过程

两个直观的问题,
1)如何确定子串?两层for循环O(n2)定位左右边界。
2)如何判定子串是回文子串?for循环O(n)判定是否对称。
复杂度:O(n3)

子串/子数组问题,联想前缀/滑动窗口/单调栈/动态规划,
回文内在特点)一个回文串本身有什么特点?去头去尾也是回文,利用这个规律,记录内串是否为回文,从内到外递进判断,可以减少for循环的对称判断,则可将时间复杂度降为O(n2)

方案)由内到外,从少到多,先判断s[:0]子串,再判断s[:1]子串,依次类推。

2、go

func countSubstrings(s string) int {f := make([]bool,len(s))cnt := 0for i := 0;i < len(s);i++ {f[i] = truecnt++ // 每个字符串都是一个回文,这里cnt++配合f[i] = ture,相互理解,而不是cnt := len(s)// 需要用到f[j+1],所以正序遍历,防止覆盖。for j := 0;j < i;j++ {f[j] = false // 复用一层数组,需要覆盖前面的值,保持严格递推。if s[i] == s[j] && (j + 1 == i || f[j + 1]) {f[j] = truecnt++}}}return cnt
}

总结

1)写下完整的思路过程,有助于清晰的理解问题,记忆问题的解答思路。
2)动态规划本质,将问题分解成规模不同性质相同的子问题,找到子问题之间的内在联系,此时便可记录这种联系点,以空间换时间。
3)动态规划常常涉及空间压缩,而压缩面临直观的两个问题,1-这个记录的状态是否过时?2-这个记录的状态是否太新?(才覆盖了)

参考文献

[1] LeetCode 回文串的数量

http://www.lryc.cn/news/14098.html

相关文章:

  • CCNP350-401学习笔记(301-350题)
  • 【LeetCode】No.225. 用队列实现栈 -- Java Version
  • 45个写规范代码的小技巧
  • MindFusion Diagramming for Java, 最新版 Crack
  • 中间件安全—Apache常见漏洞
  • Spring IOC 容器 Bean 加载过程
  • 【DRF】Django Rest Framework(5.DRF中的通用视图类-GenericAPIView方法说明与使用说明)
  • STM32 OTA应用开发——自制BootLoader
  • 时域和频域的简单理解
  • 华为OD机试 - 第 K 个最小码值的字母 | 机试题算法思路 【2023】
  • 离散数学笔记_第一章:逻辑和证明(1)
  • Rust FFI 与C语言互相调用
  • 从全局变量寻找到Tomcat回显方式
  • Tapdata Connector 实用指南:数据入仓场景之数据实时同步到 BigQuery
  • 关于机器人状态估计(12)-VIO/VSLAM的稀疏与稠密
  • Python每日一练(20230220)
  • 技术总监的“技术提升”
  • kettle安装部署_简单认识_Spoon勺子界面---大数据之kettle工作笔记002
  • 第三章 Kafka生产问题总结及性能优化实践
  • Comparable和Comparator的区别
  • 全15万字丨PyTorch 深度学习实践、基础知识体系全集;忘记时,请时常回顾。
  • 简洁易用的记账小程序——微点记账
  • Windows平台上达梦数据库的ODBC安装与配置
  • 哈希表的介绍
  • spring cloud gateway 实现redis动态路由及自动项目路由上报
  • c++函数对象(仿函数)、谓词、内建函数对象
  • 物联网对供应链管理的影响
  • c++ 那些事 笔记
  • 心跳机制Redis
  • 蓝桥杯算法训练合集十七 1.数字反转2.试题39713.矮人采金子4.筛法5.机器指令