【每日一题】2.合并回文子串 (字符串处理 + 区间DP)
题目链接:Here
遇到这种数据范围较小的计数问题应该优先考虑dp,本题就是如此。
那么应该怎么样考虑转移呢?
首先最后C中的那个价值最大的子串一定是由字符串A的一个区间和字符串B的一个区间合并得到的,
那么现在假设 A[i] ~ A[j]与 B[k] ~ B[l] 构成了一个回文串(这里设 dp[i][j][k][l])
则他能转移到的区间有
1:\(a[i-1]==a[j+1] 时\ dp[i-1][j+1][k][l]\)
2:\(a[i-1]==b[l+1]时\ dp[i-1][j][k][l+1]\)
3:\(b[k-1]==a[j+1]时\ dp[i][j+1][k-1][l]\)
4:\(b[k-1]==b[l+1]时\ dp[i][j][k-1][l+1]\)
那么对于的转移方程也就是:
if (a[i] == a[j]) dp[i][j][k][l] |= dp[i + 1][j - 1][k][l];
if (b[k] == b[l]) dp[i][j][k][l] |= dp[i][j][k + 1][l - 1];
if (a[i] == b[l]) dp[i][j][k][l] |= dp[i + 1][j][k][l - 1];
if (a[j] == b[k]) dp[i][j][k][l] |= dp[i][j - 1][k + 1][l];
然后就可以轻松的区间转移啦~~~~~
oh,在注意一下枚举过程中只有一个字母的状态一定是回文的就可以啦
AC 代码
// Murabito-B 21/04/06
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
int dp[60][60][60][60];
int main() {
ios_base::sync_with_stdio(false), cin.tie(0);
int _;
for (cin >> _; _--;) {
string a, b;
cin >> a >> b;
a = "@" + a, b = "@" + b;
int lena = a.size(), lenb = b.size();
int ans = 0;
for (int l1 = 0; l1 <= lena; ++l1)
for (int l2 = 0; l2 <= lenb; ++l2)
for (int i = 1; i <= lena - l1; ++i)
for (int k = 1; k <= lenb - l2; ++k) {
int j = i + l1 - 1, l = k + l2 - 1;
// 说明此时仅一个点
if (l1 + l2 <= 1) dp[i][j][k][l] = 1;
else {
dp[i][j][k][l] = 0;
if (a[i] == a[j]) dp[i][j][k][l] |= dp[i + 1][j - 1][k][l];
if (b[k] == b[l]) dp[i][j][k][l] |= dp[i][j][k + 1][l - 1];
if (a[i] == b[l]) dp[i][j][k][l] |= dp[i + 1][j][k][l - 1];
if (a[j] == b[k]) dp[i][j][k][l] |= dp[i][j - 1][k + 1][l];
}
if (dp[i][j][k][l]) ans = max(ans, l1 + l2);
}
cout << ans << "\n";
}
return 0;
}
【每日一题】2.合并回文子串 (字符串处理 + 区间DP)的更多相关文章
- 合并回文子串(区间dp)
链接:https://ac.nowcoder.com/acm/problem/13230来源:牛客网 题目描述 输入两个字符串A和B,合并成一个串C,属于A和B的字符在C中顺序保持不变.如" ...
- nowcoder 合并回文子串
链接:https://www.nowcoder.com/acm/contest/6/C来源:牛客网题目输入两个字符串A和B,合并成一个串C,属于A和B的字符在C中顺序保持不变.如"abc&q ...
- 最长回文子串(Longest Palindromic Substring)-DP问题
问题描述: 给定一个字符串S,找出它的最大的回文子串,你可以假设字符串的最大长度是1000,而且存在唯一的最长回文子串 . 思路分析: 动态规划的思路:dp[i][j] 表示的是 从i 到 j 的字串 ...
- 美团2017年CodeM大赛-初赛A轮 C合并回文子串
区间dp一直写的是递归版本的, 竟然超时了, 学了一下非递归的写法. #include <iostream> #include <sstream> #include <a ...
- 求最长回文子串 - leetcode 5. Longest Palindromic Substring
写在前面:忍不住吐槽几句今天上海的天气,次奥,鞋子里都能养鱼了...裤子也全湿了,衣服也全湿了,关键是这天气还打空调,只能瑟瑟发抖祈祷不要感冒了.... 前后切了一百零几道leetcode的题(sol ...
- leetcode-5 最长回文子串(动态规划)
题目要求: * 给定字符串,求解最长回文子串 * 字符串最长为1000 * 存在独一无二的最长回文字符串 求解思路: * 回文字符串的子串也是回文,比如P[i,j](表示以i开始以j结束的子串)是回文 ...
- 【LeetCode每日一题 Day 5】5. 最长回文子串
大家好,我是编程熊,今天是LeetCode每日一题的第五天,一起学习LeetCode第五题<最长回文子串>. 题意 给你一个字符串 s,找到 s 中最长的回文子串. 示例 输入:s = & ...
- 【每日一题】【奇偶分别中心扩展/动态规划】2022年2月5日-NC最长回文子串的长度
描述对于长度为n的一个字符串A(仅包含数字,大小写英文字母),请设计一个高效算法,计算其中最长回文子串的长度. 方法1:奇数偶数分别从中心扩展 import java.util.*; public c ...
- 后缀数组 - 求最长回文子串 + 模板题 --- ural 1297
1297. Palindrome Time Limit: 1.0 secondMemory Limit: 16 MB The “U.S. Robots” HQ has just received a ...
- 每日一道 LeetCode (48):最长回文子串
每天 3 分钟,走上算法的逆袭之路. 前文合集 每日一道 LeetCode 前文合集 代码仓库 GitHub: https://github.com/meteor1993/LeetCode Gitee ...
随机推荐
- redis基础命令复习(Sring,Hash,List,Set,SortedSet)
1,Redis数据结构: https://redis.io/commands 2,Redis命令---Redis通用命令(常见的有,keys,del,exists,expire,ttl) 2.1,ke ...
- python01-基础概念与环境搭建
学习目标 了解硬件 & 操作系统 & 软件(应用系统)之间的关系. 了解常见的操作系统都有哪些. 了解编译器和解释器的区别和作用. 了解编程语言进行分类 了解Python解释器的种类 ...
- Python 中的单下划线和双下划线
哈喽大家好,我是咸鱼 当我们在学习 Python 的时候,可能会经常遇到单下划线 _ 和双下划线 __ 这两种命名方式 单下划线 _ 和双下划线 __ 不仅仅是只是一种简单的命名习惯,它们在 Pyth ...
- [AI]生物本能vs机器人工程:谁才有“意识”?
[AI]生物本能vs机器人工程:谁才有"意识"? 引子 我们已经就人类意识的初级形式和高级形式进行了初步探讨.通过对比分析,我们将初级意识定义为可以无需高级意识参与的本能反应.而高 ...
- Redis缓存使用技巧和设计方案?薪火数据知识库
Redis是一种开源的内存数据库,被广泛应用于缓存系统设计和实现中.它提供了高性能.低延迟的数据访问,并支持多种数据结构和丰富的功能.下面将详细介绍Redis缓存的使用技巧和设计方案. 一.Redis ...
- java如何导入导出excel
在Java中,可以使用多种方式导入和导出Excel文件.下面将详细介绍几种常见的方法及其实现步骤: 1. Apache POI库: Apache POI是一个开源的Java库,提供了许多类和方法用于处 ...
- 如何在Web应用中添加一个JavaScript Excel查看器
前言 在现代的Web应用开发中,Excel文件的处理和展示是一项常见的需求.为了提供更好的用户体验和功能,经常需要在Web应用中添加一个JavaScript Excel查看器,小编今天将为大家展示如何 ...
- 踩坑:nacos启动报错提示需要设置JDK环境 ,报错:ERROR: Please set the JAVA_HOME variable in your environment, We need java(x64)! jdk8 or later is better! !!
换了个Windows11的新电脑,因为个人工作.学习需要,就重新下载了Nacos并解压使用,结果就踩了个坑,使用下面命令启动Nacos服务端时: startup.cmd -m standalone 直 ...
- C# 提取PDF中指定文本、图片的坐标
获取PDF文件中文字或图片的坐标可以实现精确定位,这对于快速提取指定区域的元素,以及在PDF中添加注释.标记或自动盖章等操作非常有用.本文将详解如何使用国产PDF库通过C# 提取PDF中指定文本或图片 ...
- 微软官方发布的C#开源、免费、实用的Windows工具箱
前言 今天分享一款由微软官方发布的C#开源.免费.实用的Windows工具箱(帮助用户调整和简化Windows系统的体验,从而提高工作效率):Microsoft PowerToys. 项目介绍 Mic ...