博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
LeetCode_5
阅读量:5308 次
发布时间:2019-06-14

本文共 2235 字,大约阅读时间需要 7 分钟。

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.

给定一个字符串s,找到s最长回文子串。你能够假设s长度最大为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 maxLength=0;        int index;        const int n = s.size();        int **arr;        arr = new int*[n];        for (int i = 0; i < n; i++) {            arr[i] = new int[n];            memset(arr[i], 0, sizeof(int)*n);        }        for (int k = 0; k < n; k++)        {            for (int i = 0; i < n - k; i++)            {                int j = i + k;                if (k == 0)                    arr[i][j] = 1;                else if (k == 1 && s[j] == s[i])                    arr[i][j] = 2;                else if (s[j] == s[i] && arr[i + 1][j - 1] != 0)                    arr[i][j] = arr[i + 1][j - 1] + 2;                if (arr[i][j] > maxLength)                 {                    maxLength = arr[i][j];                    index = i;                }            }        }    /*    for (int i = 0; i < n; i++)        {            for (int j = 0; j < n; j++)            {                cout << arr[i][j] << " ";            }            cout << endl;        }*/        return s.substr(index,maxLength);    }};int main(){    Solution solution;    string s = "cbbdbb";    string result = solution.longestPalindrome(s);    cout << result;    system("pause");    return 0;}

别人解法

class Solution {public:    string longestPalindrome(string s) {        if (s.empty()) return "";        if (s.size() == 1) return s;        int min_start = 0, max_len = 1;        for (int i = 0; i < s.size();) {            if (s.size() -i <= max_len / 2) break;            int j = i, k = i;            while (k < s.size() && s[k+1] == s[k]) k++;            i = k+1;            while(k < s.size() - 1 && j > 0 && s[k + 1] == s[j - 1]) { ++k; --j;}            int new_len = k - j + 1;            if (new_len > max_len) {min_start = j; max_len = new_len;}        }        return s.substr(min_start, max_len);            }};

 

 

转载于:https://www.cnblogs.com/pcxie/p/8137744.html

你可能感兴趣的文章
大数据作业
查看>>
CSS 固定布局
查看>>
Altera 与 Xilinx开发环境对比
查看>>
(28000): Access denied for user 'root'@'127.0.0.1' (using password: YES)
查看>>
【AngularJS】—— 13 服务Service
查看>>
类的XML序列化(XML Serialization)
查看>>
Angular2 - 事件和属性 - 01
查看>>
[POI2011]MET-Meteors(整体二分+树状数组)
查看>>
关于2013,致2014
查看>>
像雾像雨又像风
查看>>
JSON和JS对象之间的互转
查看>>
软件开发模型
查看>>
oracle中的闪回
查看>>
mybatis 报错Result Maps collection does not contain value for java.lang.Integer
查看>>
Timesten 日常管理命令合集
查看>>
gnome桌面无法使用笔记本的触摸板
查看>>
默认npm太慢,换用淘宝npm镜像
查看>>
设置谷歌浏览器为默认浏览器
查看>>
最大值
查看>>
html (超文本标记语言)
查看>>