题目大意:
给定一个字符串,问在该字符串的所有子串中,有多少个是回文?
解题思路:
动态规划,设定 dp[i][j] 表示第 i 个字符到第 j 个字符里是回文的个数,设字符串为 s,则状态转移方程为:
(1)s[i] == s[j]
dp[i][j] = dp[i+1][j] + dp[i][j-1] - dp[i+1][j-1] + dp[i+1][j-1] + 1;
当s[i] == s[j]时,要考虑s[i+1]到s[j]的回文数加上s[i] 到s[j-1]的回文数,由于两者都算的s[i+1]到s[j-1]的回文数,所以要减去s[i+1]到s[j-1]的回文数,由因为s[i] == s[j], 所以s[i] 到 s[j]也是回文,所以又要加上s[i+1] 到 s[j-1]的回文数再加上1。
(2)s[i] != s[j]
dp[i][j] = dp[i+1][j] + dp[i][j-1] - d][i+1][j-1];
因为s[i] != s[j],则只要考虑s[i+1]到s[j]的回文数加上s[i] 到s[j-1]的回文数,由于两者都算的s[i+1]到s[j-1]的回文数,所以要减去s[i+1]到s[j-1]的回文数。
代码:
#include <iostream> #include <cstring> #include <algorithm> #include <vector> using namespace std; long long dp[65][65]; int main() { int T, m; cin>>T; while(T--) { char s[65]; cin>>s; m = strlen(s); memset( dp, 0, sizeof(dp) ); for(int i = 0; i < m; i ++) dp[i][i] = 1; //因为单独一个字符也是回文,所以要预先处理一下; for( int i = m-1; i >= 0; i-- ) { for( int j = i+1; j < m; j++ ) { if( s[i] == s[j] ) dp[i][j] = dp[i][j-1] + dp[i+1][j] + 1; else dp[i][j] = dp[i][j-1] + dp[i+1][j] - dp[i+1][j-1]; } } cout<<dp[0][m-1]<<endl; } return 0; }
相关推荐
【标题】"POJ1159-Palindrome" 是北京大学在线编程平台POJ上的一道编程题目。这道题目主要考察的是字符串处理和回文判断的知识点。 【描述】"北大POJ1159-Palindrome 解题报告+AC代码" 暗示了解决这道问题的方法和...
Pku acm 第1159题 Palindrome 代码,有详细的注释,动态规划
《回文:数据结构的魅力与应用》 回文,这个看似简单的词汇,实则蕴含了丰富的数学和计算机科学内涵。在中文中,回文是指正读反读都能保持相同的词语,如“上海自来水来自海上”。而在计算机领域,尤其是数据结构中...
JAVA程序 Palindrome.java 输入任何字母数字组合 检查是否是回文结构? 例:abccba 从左往右看 和 从右往左看一样 为回文结构 包括检查是否带标点符号 检查是否有空格 如a bccba 输入带空格 仍为回文结构
《LeetCode9:判断回文数——Java实现详解》 在编程的世界里,LeetCode是一个广受欢迎的在线平台,它提供了各种算法问题供程序员们挑战和提升技能。今天我们要探讨的是LeetCode第9题——“回文数”。...
Palindrome Sub-Array,Problem Description A palindrome sequence is a sequence which is as same as its reversed order. For example, 1 2 3 2 1 is a palindrome sequence, but 1 2 3 2 2 is not. Given a 2-...
PalindromeNumber.java
回文数Java
palindrome22.in
北大POJ1159-Palindrome
在编程领域,回文是一种特殊的字符串,它从前向后读和从后向前读是一样的,例如"madam"、"racecar"等。本主题主要关注如何使用C++语言来实现回文检测算法。C++作为一门强大的面向对象编程语言,提供了丰富的标准库和...
palindrome_prime.c
标题中的“huiwenshu.rar_palindrome”表明这是一个关于回文数的程序或代码库,可能用于教学或练习目的。回文数是指正向读和反向读都一样的数字,比如121、12321等。在银行管理场景中,回文数可能与账户编号、交易...
3. **UVA131 - Palindrome**:这是一个关于回文串的问题,要求检查一个字符串是否是回文。可以使用双指针法或翻转字符串的方法来解决。 4. **UVA152 - The Stock Maximal Sequence**:此题属于动态规划,要求找到...
Palindrome.py
《PyPI官网下载:探索check-palindrome-kriti-0.0.1.tar.gz中的Python库知识》 PyPI(Python Package Index)是Python开发者的重要资源库,它提供了丰富的Python库供全球开发者下载和使用。本文将深入探讨标题为...
检查字符串是否为palindrome, 从前后分别检查,并计算出相同或不同的数量。
GET /java-palindrome-example/palindrome/ 解析提供的字符串,并找到其中包含的最大回文。 在此情况下,也可以将type的可选查询参数设置为slow在这种情况下,服务将使用慢得多的递归算法。 例子 GET /java-...
palindrome(STACK,QUEUE).cpp
安装要安装bencreating_palindrome ,请将此行添加到应用程序的Gemfile : gem 'bencreating_palindrome'然后安装如下: $ bundle install或者直接使用gem安装它: $ gem install bencreating_palindrome用法...