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

剑指 Offer II 020. 回文子字符串的个数

题目链接

剑指 Offer II 020. 回文子字符串的个数 mid

题目描述

给定一个字符串 s,请计算这个字符串中有多少个回文子字符串。

具有不同开始位置或结束位置的子串,即使是由相同的字符组成,也会被视作不同的子串。

示例 1:

输入:s = “abc”
输出:3
解释:三个回文子串: “a”, “b”, “c”

示例 2:

输入:s = “aaa”
输出:6
解释:6个回文子串: “a”, “a”, “a”, “aa”, “aa”, “aaa”

提示:

  • 1<=s.length<=10001 <= s.length <= 10001<=s.length<=1000
  • s由小写英文字母组成

分析:

使用 动态规划 解决本题。

我们定义 f(i,j)f(i,j)f(i,j)s[i - 1,j - 1]区间是否为回文串。

  • s[i−1]≠s[j−1]s[i-1] \neq s[j-1]s[i1]=s[j1],那么 f[i][j] = false.
  • s[i−1]=s[j−1]s[i-1] = s[j-1]s[i1]=s[j1]
    • 如果 j−i≤1j - i \leq1ji1s[i][j] = true(相当于指针 ij指向了一个字符'a',或者指向了两个相连且相等的字符 'aa')。
    • 如果 f[i-1][j+1] = trues[i][j] = true

时间复杂度: O(n2)O(n^2)O(n2)

C++代码:

class Solution {
public:int countSubstrings(string s) {int n = s.size();bool f[n+1][n+1];memset(f,false,sizeof f);int ans = 0;for(int i = n;i >= 1;i--){for(int j = i;j <= n;j++){if((s[i-1] == s[j - 1]) && (j - i <= 1 || f[i+1][j-1])){ans++;f[i][j] = true;}}}return ans;}
};

Java代码:

class Solution {public int countSubstrings(String s) {int n = s.length();boolean[][] f = new boolean[n+1][n+1];int ans = 0;for(int i = n;i >= 1;i--){for(int j = i;j <= n;j++){if((s.charAt(i-1) == s.charAt(j-1)) && (j - i <= 1 || f[i+1][j-1])){ans++;f[i][j] = true;}}}return ans;}
}
http://www.lryc.cn/news/31993.html

相关文章:

  • Python实现多键字典
  • 【python socket】实现websocket服务端
  • PANGO的CFG那些事
  • 路由协议(OSPF、ISIS、BGP)实验配置
  • Python可变对象与不可变对象的浅拷贝与深拷贝
  • 滑模控制(Sliding mode control)快速入门
  • golang的垃圾回收详解
  • 线上负载过高排查(top/vmstat/ifstat/free/df)
  • Java的注解(Annotation)
  • 信息系统项目管理师:配置管理
  • web餐饮开源程序
  • 28个案例问题分析---027---单表的11个Update接口--MyBatis
  • 大数据开发治理平台 DataWorks
  • Xshell的下载、使用、配置【ssh、telnet、串口】
  • C++回顾(七)—— 面向对象模型
  • 开源监控服务uptime-kuma
  • JavaScript混淆技术:了解其核心原理和常用手段
  • 大型医院云HIS系统:采用前后端分离架构,前端由Angular语言、JavaScript开发;后端使用Java语言开发 融合B/S版电子病历系统
  • SAP UI5 Upload/Download file through NetWeaver Gateway
  • opencv校正图像
  • JavaScript:函数与箭头函数的区别
  • 八股文(四)
  • XSS挑战赛(xsslabs)1~10关通关解析
  • 什么是以太网供电POE
  • 【JUC2022】第七章 AQS、ReentrantReadWriteLock 和 StampedLock
  • Spark 磁盘作用
  • 三、Spark 内存管理
  • Java 面试常见项目问题回答
  • 文件上传和下载(原生JS + SpringBoot实现)
  • 【C语言学习笔记】:安全性