動態規劃-最長迴文串
1. 最長迴文串
給定一個字串 s,找到 s 中最長的迴文子串。假設 s 的最大長度為1000。
示例 1:
輸入: "babad"
輸出: "bab"
注意: "aba"也是一個有效答案。
示例 2:
輸入: "cbbd"
輸出: "bb"
令表示s[j]至s[i]所表示的子串是否為迴文子串,是則為1,不是為0。如此根據S[j]是否等於s[i],可以把問題分為兩類:
(1),那麼只要是迴文子串,就是迴文子串;如果至是不是迴文子串,則也不是迴文子串。
(2),那麼一定不是迴文子串
狀態轉移方程:
string longestPalindrome(string s){
int n=(int)s.size();
//記錄最長迴文串的長度
int max_len=1 ;
//記錄迴文串開始的下標
int start=0;
//狀態陣列
int dp[1001][1001]={0};
for(int i=0;i<n;i++){
for(int j=0;j<=i;j++){
//如果i,j相鄰或者相等,直接判斷是否相等
if(i-j<2)dp[j][i]=s[j]==s[i];
//否則判斷頭尾是否相等而且減去頭尾後是否為迴文串
else dp[j][i]=(dp[j+1][i-1]&&s[i]==s[j]);
if (dp[j][i]&&max_len<i-j+1){
//如果是迴文串,而且最大長度有更新,則記錄
max_len=i-j+1;
start=j;
}
}
}
return s.substr(start,max_len);
}
相關推薦
動態規劃-最長迴文串
1. 最長迴文串 給定一個字串 s,找到 s 中最長的迴文子串。假設 s 的最大長度為1000。 示例 1: 輸入: "babad" 輸出: "bab" 注意: "aba"也是一個有效答案。
(動態規劃)最長迴文子串
程式碼 #include <stdio.h> #include <string.h> #include <math.h> #include <stdlib.h> #include <time.h> #include <
求最長迴文串-從動態規劃到"馬拉車"之路(下)
預備知識: (1)在一個數軸上有兩點i和j(i<=j)關於點m對稱,那麼有 i = 2m-j; 證明: 因為 i<=j 且 i 和 j 關於 m 對稱,那麼有 (i + j)/ 2 = m 所以 i = 2m - j; (2)迴文串的對稱性: 由迴文串的
JAVA動態規劃(二)--最長公共子序列問題(LCS_subSequence)的三種解法與最長公共子字串(LCS_subString)的兩種解法與最長迴文串(LongestPalindrome)
動態規劃法 經常會遇到複雜問題不能簡單地分解成幾個子問題,而會分解出一系列的子問題。簡單地採用把大問題分解成子問題,並綜合子問題的解匯出大問題的解的方法,問題求解耗時會按問題規模呈冪級數增加。 為了節約重複求相同子問題的時間,引入一個數組,不管它們是否對最終
leetcode 求最長迴文串
題目:Given a string s, find the longest palindromic substring in s. You may assume that the maximum length of s is 1000. 樣例
演算法 -- 四種方法獲取的最長“迴文串”,並對時間複雜進行分析對比&PHP
迴文串: “迴文串”是一個正讀和反讀都一樣的字串,比如“level”或者“noon”等等就是迴文串。 -- 來自百度百科 關於獲取字串中最長的迴文串的演算法中,目前有很多演算法,本文中主要是用PHP來實現的演算法之一。 演算法一:暴力解法 暴力計算出所有的字串並判斷。時間複雜
【3068 HDU】最長迴文串
題目:點選開啟題目連結 思路:這題要用到迴文串匹配的知識點。我們之前遇到這種題傳統思想就是分奇數和偶數情況進行暴力,從前往後遍歷每一個字元,然後以該字元為中心向兩邊查詢,但這樣的時間複雜度很高,是O(n^2),提交的話,肯定會wa。這裡介紹一種新的演算法,Manacher演算法。 Manac
LeetCode---409. 最長迴文串
題目連結:https://leetcode-cn.com/problems/longest-palindrome/description/ 題目描述: 演算法描述: 分析下題目我們可以容易知道,只要某個字元的個數為偶數個的時候,那麼這些字元一定可以構成迴文數(因為題目沒
【LeetCode】 409. 最長迴文串
1.題目 給定一個包含大寫字母和小寫字母的字串,找到通過這些字母構造成的最長的迴文串。 在構造過程中,請注意區分大小寫。比如 “Aa” 不能當做一個迴文字串。 注意: 假設字串的長度不會超過 1010。 2.思路 建立map存放26個大小寫字母的數量; 如果該字
409.最長迴文串
給定一個包含大寫字母和小寫字母的字串,找到通過這些字母構造成的最長的迴文串。 在構造過程中,請注意區分大小寫。比如 "Aa" 不能當做一個迴文字串。 注意: 假設字串的長度不會超過 1010。 示例 1: 輸入:"abccccdd" 輸出:7 解釋: 我們可以構造
【LeetCode 簡單題】91-最長迴文串
宣告: 今天是第91道題。給定一個包含大寫字母和小寫字母的字串,找到可由這些字母構造成的最長的迴文串。以下所有程式碼經過樓主驗證都能在LeetCode上執行成功,程式碼也是借鑑別人的,在文末會附上參考的部落格連結,如果侵犯了博主的相關權益,請聯絡我刪除 (手動比心ღ( ´・ᴗ・` ))
求字串中最長迴文串的長度 manacher演算法 模板
https://www.luogu.org/problemnew/show/P3805 #include<bits/stdc++.h> using namespace std; const int maxn=11000002; char S[maxn<<1];
求最長迴文串 O(n)的manacher演算法
參考以下兩篇文章。。。 一篇程式碼清晰 一篇解析明確。。 http://blog.sina.com.cn/s/blog_70811e1a01014esn.html http://wenku.baidu.com/link?url=kX7ZdfzHW7SM0cE8Vv
動態規劃——最長公共子串
package com.chao.dynamicProgramming; public class LCSL { //lcsl()方法用來計算最長公共子序列的長度 public static int lcsl(int[][] c, int[
leetcode 409. 最長迴文串
給定一個包含大寫字母和小寫字母的字串,找到通過這些字母構造成的最長的迴文串。 在構造過程中,請注意區分大小寫。比如 "Aa" 不能當做一個迴文字串。 注意: 假設字串的長度不會超過 1010。 示
manacher演算法(最長迴文串)
這是建立部落格記錄的第一個程式碼。 題目解釋: 子串:小於等於原字串長度由原字串中任意個連續字元組成的子序列 迴文:關於中間字元對稱的文法,即“aba”(單核)、“cabbac”(雙核)等 最長迴文子串:1.尋找回文子串;2.該子串是迴文子串中
在一個字串中找出最長迴文串
如何高效的在一個字串中找到最長的迴文串呢?下面我們根據程式碼來分析 首先,迴文串有兩種,一種是字串的長度是偶數,另一種就是奇數。 我們從字串第二個字元開始,同樣我們把當前起始字元叫做k 先檢驗奇數長度的字串,對比該字元的前一個和後一個(k -
lintcode 627 最長迴文串Python版本
Cottbuser 灣區人工智慧 今天 作者:Cottbuser 會多國語言的海歸 公眾號:灣區人工智慧 微博:灣區人工智慧 知乎:灣區人工智慧 AI QQ群:604562980 一線人工智慧工程師獨立兼職運營 如果本文對你有幫助,歡迎點贊,轉發 資料結構和演算法分
最長迴文串-manacher演算法模板
給出一個只由小寫英文字元a,b,c...y,z組成的字串S,求S中最長迴文串的長度. 迴文就是正反讀都是一樣的字串,如aba, abba等 Input 輸入有多組case,不超過120組,每組輸入為一行小寫英文字元a,b,c...y,z組成的字串S 兩組case之間由
最長迴文串(leetcode簡單篇四百零九題)
給定一個包含大寫字母和小寫字母的字串,找到通過這些字母構造成的最長的迴文串。 在構造過程中,請注意區分大小寫。比如 “Aa” 不能當做一個迴文字串。 注意: 假設字串的長度不會超過 1010。 示例 1: 輸入: “abccccdd” 輸出: