/**
738 · 计数回文子序列
算法
Hard
Accepted Rate
34%

DescriptionSolutionNotesDiscussLeaderboard
Description
给出一个字符串 S, 计算字符串 S 中不同非空回文子序列的数量, 返回这个数对 10^9 + 7 取模后得结果.
字符串 S 的子序列可以通过删去 S 中 0 个或多个字符得到. 一个序列如果是回文的, 那么它逆序后与原序列相等.
两个序列 A[1], A[2], … B[1], B[2], … 如果存在 A[i] != B[i], 那么这两个序列是不同的.

S 长度的范围为 [1, 1000].
S 中所有的字符 S[i] 均来自集合 {‘a’, ‘b’, ‘c’, ‘d’}.

Example
样例 1:

输入:“bccb”
输出:6
解释:
6 个不同的非空回文子序列为 “b”, “c”, “bb”, “cc”, “bcb”, “bccb”.
注意 bcb 只计一次, 即使它出现了两次
样例 2:

输入:“abcdabcdabcdabcdabcdabcdabcdabcddcbadcbadcbadcbadcbadcbadcbadcba”
输出:104860361
解释:
字符串 S 有3104860382个不同的非空回文子序列, 对 10^9 + 7 取模后得 104860361
Tags
Company
领英

https://www.cnblogs.com/beiyeqingteng/p/11206410.html

https://www.lintcode.com/problem/738/
*/

package main/*** @param str: a string S* @return: the number of different non-empty palindromic subsequences in S*/
func countPalindSubseq(str string) int {// write your code herevar md int = 1e9 + 7if str == "" {return 0}var n int = len(str)if n <= 0 {return 0}var dp [][]int = make([][]int, n)for i := 0; i < n; i++ {dp[i] = make([]int, n)dp[i][i] = 1}for dis := 1; dis < n; dis++ {for i := 0; i < n - dis; i++ {var j int = i + disif str[i] == str[j] {var low = i + 1var high = j - 1for {if low > high || str[low] == str[j] {break}low += 1}for {if low > high || str[high] == str[j] {break}high -= 1}if low > high {dp[i][j] = 2*dp[i+1][j-1] + 2} else if low == high {dp[i][j] = 2*dp[i+1][j-1] + 1} else {dp[i][j] = 2*dp[i+1][j-1] - dp[low+1][high-1]}} else {dp[i][j] = dp[i+1][j] + dp[i][j-1] - dp[i+1][j-1]}if dp[i][j] < 0 {dp[i][j] += md} else {dp[i][j] %= md}}}return dp[0][n-1]
}

Lintcode 738.Count Different Palindromic Subsequences go相关推荐

  1. 【Hard 递归 动态规划 回文串15】LeetCode 730. Count Different Palindromic Subsequences

    LeetCode 730. Count Different Palindromic Subsequences 博客转载自:http://zxi.mytechroad.com/blog/dynamic- ...

  2. lintcode :Count and Say 报数

    题目: 报数 报数指的是,按照其中的整数的顺序进行报数,然后得到下一个数.如下所示: 1, 11, 21, 1211, 111221, ... 1 读作 "one 1" -> ...

  3. leetcode算法练习 JavaScript实现

    leetcode 表格内容由spider.js从leetcode-cn.com爬取. 已做题目答案也从leetcode-cn.com中爬取并生成文件. 解题进度:已解决 140/637 - 简单 94 ...

  4. LeetCode All in One 题目讲解汇总(持续更新中...)

    原文地址:https://www.cnblogs.com/grandyang/p/4606334.html 终于将LeetCode的大部分题刷完了,真是漫长的第一遍啊,估计很多题都忘的差不多了,这次开 ...

  5. 【LeetCode】字符串 string(共112题)

    [3]Longest Substring Without Repeating Characters (2019年1月22日,复习) [5]Longest Palindromic Substring ( ...

  6. 回文子序列_计算回文子序列的总数

    回文子序列 Problem statement: 问题陈述: Given a string str, find total number of possible palindromic sub-seq ...

  7. leetcode 题解 (500-1000题,持续更新,part 2)

    part1(1-500), part3(1000-*) 502. IPO 题意:给定k,w,profits数组和capital数组.k表示最多可完成的任务数.w是初始资本.profits是各个任务的收 ...

  8. LinkedIn TAG

    1 [leetcode]243. Shortest Word Distance最短单词距离 Two Pointers 2 [leetcode]244. Shortest Word Distance I ...

  9. 字符串的回文子序列个数_计算给定字符串中回文子序列的数量

    字符串的回文子序列个数 Problem statement: 问题陈述: Given a string you have to count the total number of palindromi ...

最新文章

  1. python编程试题定位列表元素的函数是_笨办法学Python 习题 34: 访问列表的元素
  2. AjaxPro.2.dll在VS2005使用中的基本使用
  3. Windows 不能在 本地计算机 启动 SQL Server 服务
  4. 计算机主板揭秘(上)图文并茂版
  5. 梯度下降法和随机梯度下降法
  6. 缓存击穿/穿透/雪崩
  7. C语言 | 循环语句总结
  8. ROS ( C++) 订阅一个机器人的位置并发布给另外一个机器人作为目标goal
  9. CSDN星城大巡礼,长沙“科技之星”年度企业评选正式开启
  10. python3.7怎么安装的_怎么安装python3.7:python 3.7入门教程
  11. mysql备份怎么锁库_MySQL锁(一)全局锁:如何作全库的逻辑备份?
  12. Mybatis注解: SQL语句映射@Select @Insert @Updata @Delete @SelectKey
  13. Spring boot 开发 GA/T1400 协议之注册、保活、注销、校时功能
  14. Matlab深度学习实践之手写体识别(含详细注释)
  15. [es7]es查询实践示例
  16. 组策略设置计算机计划任务,使用组策略配置域中任务计划
  17. RouterOS 端口映射
  18. Cisco路由器的命令配置教程详解
  19. 【20220912】电商业务的核心流程
  20. 作业 5:词频统计——增强功能

热门文章

  1. 谷歌二次发力,正式发布Android 12L!
  2. 独家第一时间为你解密铁路12306手机客户端的开发技术
  3. NVIC_SystemReset,上电复位(BOD),看门狗复位的差异
  4. 硝烟弥漫 三大运营商开启新一轮宽带市场争夺赛
  5. Python基础 3.5 HTML CSS JS 和 JQuery
  6. css和js优化_如何为更快的站点优化CSS和JS
  7. android 打开蓝牙可被发现,手机蓝牙隐藏功能,竟然被学姐发现了!
  8. 赛门铁克企业级防病毒产品 》(Symantec Endpoint Protection)V11.0.6005.562 简体中文版[压缩包]
  9. Houdini下如何安装Arnold
  10. 台式计算机显示太大字,电脑打开软件字太大怎么办