Leetcode之动态规划(DP)专题-647. 回文子串(Palindromic Substrings)
Leetcode之动态规划(DP)专题-647. 回文子串(Palindromic Substrings)
给定一个字符串,你的任务是计算这个字符串中有多少个回文子串。
具有不同开始位置或结束位置的子串,即使是由相同的字符组成,也会被计为是不同的子串。
示例 1:
输入: "abc"
输出: 3
解释: 三个回文子串: "a", "b", "c".
示例 2:
输入: "aaa"
输出: 6
说明: 6个回文子串: "a", "a", "a", "aa", "aa", "aaa".
注意:
- 输入的字符串长度不会超过1000。
dp:
定义:dp[i][j]表示在从i开始到j结束这段字符串里,如果是回文串,则dp[i][j]=1,不是则dp[i][j]=0;
状态转移方程:
if((s.charAt(i)==s.charAt(j)) && ((j-i<=2) || dp[i+1][j-1]==1)){
dp[i][j] = 1;
}
举例解释:
"aba"
i=2 j=2 "a" 长度为1,是回文字符串。
i=1 j=1 "b" 长度为1,是回文字符串
i=1 j=2 "ab" 长度为2,但左不等于右,不是
i=0 j=0 "a" 长度为1,是回文字符串
i=0 j=1 "ab" 长度为2,且左不等于右,不是
i=0 j=2 "aba" 长度为3,且左等于右,是
(只要长度为3,且左等于右,不管中间是什么,都是回文字符串)
再举一种情况 "abba"
i=0 j=3 截取后为"abba" 左等于右,但长度大于3,接着判断dp[i+1][j-1]是不是1,即判断dp[1][2],即字符串"bb"是不是回文串。
class Solution {
public int countSubstrings(String s) {
int res = 0;
int n = s.length();
int[][] dp = new int[n][n];
for (int i = n-1; i >= 0; i--) {
for (int j = i; j < n; j++) {
if((s.charAt(i)==s.charAt(j)) && ((j-i<=2) || dp[i+1][j-1]==1)){
dp[i][j] = 1;
res++;
}
}
}
return res;
}
}
Leetcode之动态规划(DP)专题-647. 回文子串(Palindromic Substrings)的更多相关文章
- LeetCode 647. 回文子串(Palindromic Substrings)
647. 回文子串 647. Palindromic Substrings 题目描述 给定一个字符串,你的任务是计算这个字符串中有多少个回文子串. 具有不同开始位置或结束位置的子串,即使是由相同的字符 ...
- [Swift]LeetCode647. 回文子串 | Palindromic Substrings
Given a string, your task is to count how many palindromic substrings in this string. The substrings ...
- Java实现 LeetCode 647 回文子串(暴力)
647. 回文子串 给定一个字符串,你的任务是计算这个字符串中有多少个回文子串. 具有不同开始位置或结束位置的子串,即使是由相同的字符组成,也会被计为是不同的子串. 示例 1: 输入: "a ...
- [LeetCode] 647. 回文子串 ☆☆☆(最长子串、动态规划、中心扩展算法)
描述 给定一个字符串,你的任务是计算这个字符串中有多少个回文子串. 具有不同开始位置或结束位置的子串,即使是由相同的字符组成,也会被计为是不同的子串. 示例 1: 输入: "abc" ...
- [LeetCode]647. 回文子串(DP)
###题目 给定一个字符串,你的任务是计算这个字符串中有多少个回文子串. 具有不同开始位置或结束位置的子串,即使是由相同的字符组成,也会被计为是不同的子串. 示例 1: 输入: "abc&q ...
- Leetcode(5)-最长回文子串(包含动态规划以及Manacher算法)
给定一个字符串 s,找到 s 中最长的回文子串.你可以假设 s 的最大长度为1000. 示例 1: 输入: "babad" 输出: "bab" 注意: &quo ...
- Leetcode 647.回文子串
回文子串 给定一个字符串,你的任务是计算这个字符串中有多少个回文子串. 具有不同开始位置或结束位置的子串,即使是由相同的字符组成,也会被计为是不同的子串. 示例 1: 输入: "abc&qu ...
- Leetcode(5)最长回文子串
Leetcode(4)寻找两个有序数组的中位数 [题目表述]: 给定一个字符串 s,找到 s 中 最长 的回文子串.你可以假设 s 的最大长度为 1000.' 第一种方法:未完成:利用回文子串的特点 ...
- LeetCode之“字符串”:最长回文子串
题目要求: 给出一个字符串(假设长度最长为1000),求出它的最长回文子串,你可以假定只有一个满足条件的最长回文串.例如,给出字符串 "abcdzdcab",它的最长回文子串为 & ...
随机推荐
- 第107题:二叉树的层次遍历II
一. 问题描述 给定一个二叉树,返回其节点值自底向上的层次遍历. (即按从叶子节点所在层到根节点所在的层,逐层从左向右遍历) 例如: 给定二叉树 [3,9,20,null,null,15,7], 3 ...
- Django 反向查找(related_name)
先定义两个模型,一个是A,一个是B,是一对多的类型 class A(models.Model): name= models.CharField('名称', max_length=32) class B ...
- tableviewer自动调整列宽
public void resizeTableColumn(TableColumn[] treeColumns) { for (TableColumn tc : treeColumns) tc.pac ...
- 第二章 C#语法快速热身
C#语法快速热身 语法 if(条件表达式){ 代码块 } 语法 if(条件表达式){ 代码块 }else{ 代码块2 } 语法 if(条件表达式1){ 代码块1 if(条件表达式1)){ }else{ ...
- csv和xlsx区别
CSV是文本文件,用记事本就能打开.XLS 是二进制的文件只有用 EXCEL 才能打开: CSV 文件格式只能保存活动工作表中的单元格所显示的文本和数值.数据列以逗号分隔,每一行数据都以回车符结束.如 ...
- pyecharts v1 版本 学习笔记 饼图,玫瑰图
饼图: 普通案例 from example.commons import Faker from pyecharts import options as opts from pyecharts.char ...
- ps/top
ps -e 显示所有进程,环境变量 -f 全格式显示 -a 显示所有用户的所有进程(包括其他用户) -u 按用户名和启动时间的顺序显示进程 -x 显示无控制终端的进程 -w 显示加宽可以显示较多信息 ...
- CMake学习- 使用批处理设置编译环境
批处理-.bat cd /d "%~dp0" mkdir build mkdir install cd build ..\cmake37\bin\cmake.exe -D WIN3 ...
- 如何更改电脑ip
首先打开控制面板==>点击网络和internet==>点击网络和共享中心==>点击更改适配器设置==>右键无线连接或宽带连接(视情况而定)==>属性==>双击ipv ...
- python-selenium视频教程分享
1.python电子书 2.课件 3.前段调试工具 4.文档资料 5.python-selenium课程列表 6.sele01-sele22 百度网盘连接:链接: https://pan.baidu. ...