動態規劃演算法之尋找最長迴文數串
輸出需要刪除的字元個數。
本題可轉化為動態規劃演算法求解最長公共子序列問題,然後用總字串長度減去最長子序列長度,便得出問題的答案。
先將給定的初始字串S1反過來排列,設為S2,求S1和S2的最長公共子序列便可。C++程式碼如下:
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
int temp[100][100];
void caculate(string s1){
string s2(s1);
reverse(s2.begin(), s2.end());
int len = s1.length();
memset(temp, 0, sizeof(temp));
for (int i = 0; i<len; ++i)
{
for (int j = 0; j<len; ++j)
{
if (s1[i] == s2[j])
temp[i + 1][j + 1] = temp[i][j] + 1;
else
temp[i + 1][j + 1] = max(temp[i][j + 1], temp[i + 1][j]);
}
}
cout << len - temp[len][len] << endl;
}
int main()
{
string s;
getline(cin, s);
caculate(s);
system("pause");
return 0;
}
程式執行結果如下:
相關推薦
動態規劃演算法之尋找最長迴文數串
給定一個字串s,你可以從中刪除一些字元,使得剩下的串是一個迴文串。如何刪除才能使得迴文串最長呢? 輸出需要刪除的字元個數。 本題可轉化為動態規劃演算法求解最長公共子序列問題,然後用總字串
Longest Palindromic Substring(動態規劃之尋找最長迴文子序列)
求一個字串中符合迴文性質的最長子序列Example:Input: "babad" Output: "bab" Note: "aba" is also a valid answer. Example:Input: "cbbd" Output: "bb"演算法思路:一開始的
leetcode演算法題—golang—最長迴文子串(題5)
題目:最長迴文子串 給定一個字串 s,找到 s 中最長的迴文子串。你可以假設 s 的最大長度為1000。 示例 1: 輸入: "babad" 輸出: "bab" 注意: "aba"也是一個有效答案。 示例 2: 輸入: "cbb
LeetCode之5. 最長迴文子串
LeetCode之5. 最長迴文子串 給定一個字串 s,找到 s 中最長的迴文子串。你可以假設 s 的最大長度為 1000。 示例 1: 輸入: “babad” 輸出: “bab” 注意: “aba” 也是一個有效答案。 示例 2: 輸
演算法題:最長迴文子串(C#實現)
給定一個字串 s,找到 s 中最長的迴文子串。你可以假設 s 的最大長度為 1000。 示例 1: 輸入: "babad" 輸出: "bab" 注意: "aba" 也是一個有效答案。 示例 2: 輸入: "cbbd" 輸出: "bb
manacher's algorithm尋找最長迴文子串
manacher’s algorithm尋找最長迴文子串 #include <vector> #include <iostream> #include <string> using namespace std; strin
演算法學習:最長迴文子串(c++)leetcode 5
給定一個字串 s,找到 s 中最長的迴文子串。你可以假設 s 的最大長度為 1000。 示例 1: 輸入: "babad" 輸出: "bab" 注意: "aba" 也是一個有效答案。 示例 2:
資料結構與演算法隨筆之------最長迴文子串四種方法求解(暴力列舉+動態規劃+中心擴充套件+manacher演算法(馬拉車))
所謂迴文串,就是正著讀和倒著讀結果都一樣的迴文字串。 比如: a, aba, abccba都是迴文串, ab, abb, abca都不是迴文串。 一、暴力法 方法一:直接暴力列舉 求每一個子串時間複雜度O(N^2), 判斷子串是不是迴文O(N),兩者是相乘關係,所以時間
夕拾演算法進階篇:16)最長迴文子串(動態規劃DP)
給出一個字串S,求S的最長迴文子串的長度。 樣例:字串“PATZJUJZTACCBCC”的迴文子串為“ATZJUJZTA”,長度為9。 如果使用暴力解法,列舉子串的兩個端點i和j,時間複雜度需要O(n^2)。判斷子串是否為迴文需要O(n),總體時間複雜度為O(n^3),使用
演算法學習——尋找字串中的最長迴文子串
文章轉載自公眾號《網際網路偵查》 /** * @author xiaoshi on 2018/9/24. * Happy Mid-Autumn Festival */ public class PlalindromeString { // 判斷一個字串是否迴文,演算法中用
(動態規劃)最長迴文子串
程式碼 #include <stdio.h> #include <string.h> #include <math.h> #include <stdlib.h> #include <time.h> #include <
Leetcode中級演算法之最長迴文子串(5)C++
給定一個字串 s,找到 s 中最長的迴文子串。你可以假設 s 的最大長度為 1000。 示例 1: 輸入: “babad” 輸出: “bab” 注意: “aba” 也是一個有效答案。 示例 2: 輸入: “cbbd” 輸出: “bb” 這道題在網上看到了許多解法,如動態規劃,
動態規劃:最長迴文子串 & 最長迴文子序列
一、題目 所謂迴文字串,就是一個字串,從左到右讀和從右到左讀是完全一樣的,比如 “a”、“aba”、“abba”。 對於一個字串,其子串是指連續的一段子字串,而子序列是可以非連續的一段子字串。 最長迴文子串 和 最長迴文子序列(Longest Palindrom
LeetCode 5. Longest Palindromic Substring 最長迴文子串 Python 四種解法(Manacher 動態規劃)
Longest Palindromic Substring 最長迴文子串 學習筆記 1. Brute method 第一種方法:直接迴圈求解,o(n2)o(n2) class Solution: def longestPalindrome(self, s):
動態規劃1.求最長迴文子串
求字串的子串大致有四中方法,暴力,DP,中心拓展,馬拉車演算法,這篇講DP怎麼做。 DP最重要的就是要能利用到前面的結果來推斷當前狀態,比暴力優化的地方就在此,暴力需要對每一個字串做一次O(n)的操作才能判斷出結果,也就是整個過程要O(n^3),但DP對每一個字串的判斷時間是O(1),總共是O(n^2)
leetcode5. 最長迴文子串(動態規劃)
給定一個字串 s,找到 s 中最長的迴文子串。你可以假設 s 的最大長度為1000。 示例 1: 輸入: "babad" 輸出: "bab" 注意: "aba"也是一個有效答案。 示例 2: 輸入: "cbbd" 輸出: "bb" 解題思路: 採用動態規劃的
【動態規劃】求最長公共子串,最長迴文子串
題目 : 給定兩個字串,求出它們之間連續的最長的相同子字串的長度。 eg : fbaabe,ebaabf,連續最長子串長度為4。 注意:求最長迴文子串也可以用求最長公共子串來求,只需將字串反轉作為另外一個字串,迴文部分反轉之後不變,然後求LCS(Longes
最長迴文子串(動態規劃和遞迴)
給一個字串,找出它的最長的迴文子序列的長度。例如,如果給定的序列是“BBABCBCAB”,則輸出應該是7,“BABCBAB”是在它的最長迴文子序列。 “BBBBB”和“BBCBB”也都是該字串的迴文子序列,但不是最長的。注意和最長迴文子串的區別(參考:最長迴文串)!這
【HDU - 3068】最長迴文(Manacher演算法,馬拉車演算法求最長迴文子串)
題幹: 給出一個只由小寫英文字元a,b,c...y,z組成的字串S,求S中最長迴文串的長度. 迴文就是正反讀都是一樣的字串,如aba, abba等 Input 輸入有多組case,不超過120組,每組輸入為一行小寫英文字元a,b,c...y,z組成的字串S 兩
【探索-中級演算法】最長迴文子串
這一題可以參考:647. 迴文子串 本質上是一樣的,要判斷出所有的迴文字串,然後找到其中最長的那一個。 中心擴充套件法 中心擴充套件就是把給定的字串的每一個字母當做中心,向兩邊擴充套件,這樣來找最長的子迴文串。演算法複雜度為O(N^2) public Stri