給定乙個字串s,找到s中最長的回文子字串。 您可以假設s的最大長度為1000。
例1:輸入:「babad」
輸出:「bab」
注意:「aba」也是乙個有效的答案。
例2:輸入:「cbbd」
輸出:「bb」
第一眼看到這個題目,想到的是反轉字串找相同的序列即可,然後發現具體實施更麻煩了。
讓我們思考回文序列的規律:
aaaba
abba
無非是上面的三種形式。
假設我們的字串是』aba』 這種形式:
a b a
我們講從第某個字元』b』(下角標為index)開始遍歷, 比較他的左右兩個字元(即 before=index-1 和 after=index+1)是否相等, 這樣就很容易找出最長的回文子串行了。
值得注意的是,當我們的回文形式是』abba』時,注意該回文序列是雙軸形式,那就需要調整相應的before和after的位置。
演算法如下:
public string longestpalindrome
(string s)
else
}while
(true
)else
}while
(true)if
(before != i-1)
}}return longest;
}
當然這個演算法很不優雅。有沒有一種更簡單,快捷的方式呢,有的,還是o(n)
在採用上面的演算法時,曾想過能否直接算出某個字元左右回文值。比如 abcwcba :
a b c w c b a
0 1 2 3 2 1 0
最長子序列
最長子序列可以說是剛接觸動態規劃的人經常遇見也不得不解決的問題,最常見的有兩種,一種是最長公共子串行 lcs 還有乙個是最長上公升子串行 lis 今天我就總結下這兩個的做法。一 最長公共子串行 lcs 題目描述 給你兩個陣列,可以是數字的,也可以是字串,我們假設是數字的!舉個例子 x 1,5,6,4...
最長子序列
在做oj題目的時候,經常會用到字串的處理。例如,比較二個字串相似度。這篇文章介紹一下求兩個字串的最長公共子串行。乙個字串的子串行,是指從該字串中去掉任意多個字元後剩下的字元在不改變順序的情況下組成的新字串。最長公共子串行,是指多個字串可具有的長度最大的公共的子串行。include includech...
最長子序列
題 給定乙個長度為n的陣列,找出乙個最長的單調自增子序列 不一定連續,但是順序不能亂 例如 給定乙個長度為8的陣列a,則其最長的單調遞增子串行為,長度為6。思路1 第一眼看到題目,很多人肯定第一時間想到的是lcs。先給陣列排個序形成新陣列,然後再把新陣列和原陣列拿來求lcs,即可得到答案。這種解法很...