5. Longest Palindromic Substring——LeetCode OJ

来源:互联网 发布:flume json source 编辑:程序博客网 时间:2024/05/22 13:53

Difficulty:Medium
Given a string s, find the longest palindromic substring in s. You may assume that the maximum length of s is 1000.
Example:
Input: “babad”
Output: “bab”
Note: “aba” is also a valid answer.

Example:
Input: “cbbd”
Output: “bb”

给定一个字符串,找出其最长回文子串。

class Solution {public:    string longestPalindrome(string s) {        int len = s.size();        if(len <= 1)        {            return s;        }        bool dp[len][len];//dp[i][j]判断s[i...j]是不是回文数        memset(dp, 0, sizeof(dp));        int resLeft = 0;        int resRight = 0;        dp[0][0] = true;        for(int i = 1; i < len; ++i)        {            dp[i][i] = true;            dp[i][i-1] = true;        }        for(int m = 2; m <= len; ++m)//子串长度            for(int n = 0; n <= len - m; ++n)//子串初始值            {                if(s[n] == s[n + m - 1] && dp[n + 1][n + m - 2])                {                    dp[n][n + m - 1] = true;                    if(resRight-resLeft + 1 < m)                    {                        resLeft = n;                        resRight = n + m - 1;                    }                }            }        return s.substr(resLeft, resRight-resLeft + 1);    }};

Runtime: 53 ms

利用了动态规划的知识。暴力枚举也不失为一种方法,遍历全部子串,再判断是否为回文数。

想起一个回文数的课后习题和面试题(C语言):

int  main(void)  {      printf("请输入数字:\n");       int num;       int ret;      scanf("%d",&num);       temp = palindromic(num);      if(temp)     {         printf("这是回文数!\n");     }     else      {        printf("不是回文数!\n");      }    return 0;  }  int palindromic(int n)  {         int iVer = 0;     while(n != 0)       {          iVer = iVer * 10 + n % 10;          n = n / 10;      }       if(iVer == n)     {          return 1;      }    else      {        return 0;      }}  
原创粉丝点击