版权声明:本文为博主原创文章,转载请注明原文出处!
写作时间:2019-02-10 00:04:34
LeetCode-Longest Palindromic Substring
题目描述
LeetCode第5道题目:5. Longest Palindromic Substring
Given a string s, find the longest palindromic substring in s. You may assume that the maximum length of s is 1000.
Example 1:
1 | Input: "babad" |
Example 2:
1 | Input: "cbbd" |
题目要求我们找到给定字符串中的所有回文子串中最长子串。
思路分析
这个题目和之前的LeetCode-Palindromic Substrings题目的思路是一样的,Palindromic Substrings是找回文的个数。在这个过程中其实我们是找出了所有的回文子串,接下来我们统计一下每个回文的长度,选择出最长的那个就是本文的答案了(当然,在代码实现过程中统计最长子串不一定是找到了所有的子串之后再统计,可能是边寻找边统计)。所以,方法还是老方法,可以利用动态规划,也可以利用中心扩散法。
有不明白的地方可以参见我之前的博文《LeetCode-Palindromic Substrings》,这里我只给出了使用中心扩散法进行求解的代码实现。
C++实现
1 | class Solution { |
可以对比一下,和LeetCode-Palindromic Substrings的答案是不是没多大变化?
Scala实现
1 | object Solution { |
这里需要注意的是:
需要对于空字符串的特殊处理(这里使用的是
match
匹配,当然也可以使用if...else
条件语句)我们使用
yield
每次生成回文子串的左右指针,然后再使用maxBy
得到最长子串对应的左右指针。takeWhile
函数对集合进行遍历过程中当条件不满足的时候会立即停止判断,返回的是最后那个满足的元素。(filter
函数会返回集合中所有满足条件的元素)