【LeetCode】131.Palindrome Partitioning回文划分

2024-04-14 07:08

本文主要是介绍【LeetCode】131.Palindrome Partitioning回文划分,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

题目:

            


理解:即将一个字符串划分成回文子串,穷举所有的可能。


分析:

           由我的LeetCode】 5.Longest Palindromic Substring最长回文子串问题  这篇文章分析可知,判断回文子串的问题可以转换为一个动态规划的问题,这里我使用了动态规划来找到所有的回文子串,将其记录到一个二维数组中,然后将这个数据转化成一个等价图,利用一个动态图搜索算法来找到从起始节点到终止节点的路径,每一个节点便是字符串的一个分割点,由此可以得到问题的解。


代码:

<span style="font-size:12px;">class Solution {
public:vector<vector<string>> partition(string s) {int P[s.length()][s.length()];for(int i=0;i<s.length();i++)for(int j=0;j<s.length();j++)P[i][j]=0;for(int i=0;i<s.length();i++)P[i][i]=1;for(int i=0;i<s.length()-1;i++){if(s[i]==s[i+1])P[i][i+1]=1;}for(int len=3;len<=s.length();len++){for(int i=0;i<s.length()-len+1;i++){int j=i+len-1;if(P[i+1][j-1]==1&&s[i]==s[j])P[i][j]=1;}}vector < vector<string> > table[s.length()+1];vector <string> tempPath;table[0].push_back(tempPath);for(int j=1;j<=s.length();j++){for(int i=0;i<j;i++)//找到前置节点{if(P[i][j-1]==1)//若i为其前置节点{for(int k=0;k<table[i].size();k++){vector<string> temp=table[i][k];temp.push_back(s.substr(i,j-i));table[j].push_back(temp);}}}}return table[s.length()];}
};</span>



这篇关于【LeetCode】131.Palindrome Partitioning回文划分的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/902391

相关文章

哈希leetcode-1

目录 1前言 2.例题  2.1两数之和 2.2判断是否互为字符重排 2.3存在重复元素1 2.4存在重复元素2 2.5字母异位词分组 1前言 哈希表主要是适合于快速查找某个元素(O(1)) 当我们要频繁的查找某个元素,第一哈希表O(1),第二,二分O(log n) 一般可以分为语言自带的容器哈希和用数组模拟的简易哈希。 最简单的比如数组模拟字符存储,只要开26个c

csu1328(近似回文串)

题意:求近似回文串的最大长度,串长度为1000。 解题思路:以某点为中心,向左右两边扩展,注意奇偶分开讨论,暴力解即可。时间复杂度O(n^2); 代码如下: #include<iostream>#include<algorithm>#include<stdio.h>#include<math.h>#include<cstring>#include<string>#inclu

poj 3974 and hdu 3068 最长回文串的O(n)解法(Manacher算法)

求一段字符串中的最长回文串。 因为数据量比较大,用原来的O(n^2)会爆。 小白上的O(n^2)解法代码:TLE啦~ #include<stdio.h>#include<string.h>const int Maxn = 1000000;char s[Maxn];int main(){char e[] = {"END"};while(scanf("%s", s) != EO

poj 2104 and hdu 2665 划分树模板入门题

题意: 给一个数组n(1e5)个数,给一个范围(fr, to, k),求这个范围中第k大的数。 解析: 划分树入门。 bing神的模板。 坑爹的地方是把-l 看成了-1........ 一直re。 代码: poj 2104: #include <iostream>#include <cstdio>#include <cstdlib>#include <al

leetcode-24Swap Nodes in Pairs

带头结点。 /*** Definition for singly-linked list.* public class ListNode {* int val;* ListNode next;* ListNode(int x) { val = x; }* }*/public class Solution {public ListNode swapPairs(L

leetcode-23Merge k Sorted Lists

带头结点。 /*** Definition for singly-linked list.* public class ListNode {* int val;* ListNode next;* ListNode(int x) { val = x; }* }*/public class Solution {public ListNode mergeKLists

C++ | Leetcode C++题解之第393题UTF-8编码验证

题目: 题解: class Solution {public:static const int MASK1 = 1 << 7;static const int MASK2 = (1 << 7) + (1 << 6);bool isValid(int num) {return (num & MASK2) == MASK1;}int getBytes(int num) {if ((num &

Thread如何划分为Warp?

1 .Thread如何划分为Warp? https://jielahou.com/code/cuda/thread-to-warp.html  Thread Index和Thread ID之间有什么关系呢?(线程架构参考这里:CUDA C++ Programming Guide (nvidia.com)open in new window) 1维的Thread Index,其Thread

【每日一题】LeetCode 2181.合并零之间的节点(链表、模拟)

【每日一题】LeetCode 2181.合并零之间的节点(链表、模拟) 题目描述 给定一个链表,链表中的每个节点代表一个整数。链表中的整数由 0 分隔开,表示不同的区间。链表的开始和结束节点的值都为 0。任务是将每两个相邻的 0 之间的所有节点合并成一个节点,新节点的值为原区间内所有节点值的和。合并后,需要移除所有的 0,并返回修改后的链表头节点。 思路分析 初始化:创建一个虚拟头节点

ural 1297. Palindrome dp

1297. Palindrome Time limit: 1.0 second Memory limit: 64 MB The “U.S. Robots” HQ has just received a rather alarming anonymous letter. It states that the agent from the competing «Robots Unli