要求:给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为1000。
示例 1:
输入: “babad”
输出: “bab”
注意: "aba"也是一个有效答案。
示例 2:
输入: “cbbd”
输出: “bb”
解法一:暴力求解法
思想:
反转 S,使之变成 S’。找到 S 和 S’之间最长的公共子串,这也必然是最长的回文子串。
理由:如果找两个字符串的公共子串,i指向第一个字符串,j指向第二个字符串,用暴力求解法肯定就是i每走一步,j就不断的从头遍历第二个字符串,然后判断是否相等。
j从前往后走,就相当于原字符串从后向前走。
S=“abacdfgdcaba” , S ′ =“abacdgfdcaba”:S 以及 S’ 之间的最长公共子串为 “abacd”,显然,这不是回文。所以我们要加一个判断条件就可以了。
暴力算法的时间复杂度为O(n^3),在LeetCode中跑步过去,仅供参考
//判断一个字符串是不是回文
int IfPlalindrome(char *s) {
int count = strlen(s);
int left = 0;
int right = count - 1;
while (left < right)
{