(一)题目

问题:求给定字符串s的回文(palindrome)子串中,长度最大的回文子串的长度。

回文(palindrome)是指从左往右读和从右往左读字符串,看到的字符串都是一样的。比如“cabbeaf”,回文子串包括”c”“aba”“abba”等,最长的子串是“abba”,长度为4.

程序输入:“cabbeaf”

程序输出:4

(二)解题

当时笔试的时候没有AC,线下在VS上调出来了。

此方法的主要思想是:动态规划,利用一个path[i][j]数组记录字符串i到j的最长回文长度,状态转移方程分以下两种情况:

1、如果s[i]==s[j],则回文串长度为path(i+1,j-1)+2;

2、如果s[i]!=s[j],则取max(path(i+1,j),path(i,j-1));

#include <stdio.h>
#include <string>
#include <iostream>

using namespace std;

int path[1000][1000] ={0};
int maxlen=0;
int findPalindrome(string& s,int start , int end)
{
    if (start > end)
        return 0;
    if (start == end)
        return 1;
    if (path[start][end] != 0)
        return path[start][end];
    if (s[start] == s[end])
    {
        path[start][end] = findPalindrome(s,start+1,end-1) +2;
        if (maxlen<path[start][end])
        {
            maxlen = path[start][end];
        }
    }
    if (s[start] != s[end])
    {
        int temp1 =findPalindrome(s,start+1,end);
        int temp2 =findPalindrome(s,start,end-1);
        path[start][end] = temp1>temp2?temp1:temp2;
        if (maxlen<path[start][end])
        {
            maxlen = path[start][end];
        }
    }
    return maxlen;
}
int main (){
    string s = "cabbeaf";
    findPalindrome(s,0 ,s.length()-1);
    cout<<maxlen<<endl;
    return 0;
}

没有在OJ平台上测试,也不知道能不能AC,反正大致思想是这样的。

【面试笔试算法】Problem 9: 腾讯2016年研发实习笔试题:最长回文子串的更多相关文章

  1. Manacher 求最长回文子串算法

    Manacher算法,是由一个叫Manacher的人在1975年发明的,可以在$O(n)$的时间复杂度里求出一个字符串中的最长回文子串. 例如这两个回文串“level”.“noon”,Manacher ...

  2. 面试经典算法:马拉松算法,最长回文子串Golang实现

    求一个字符串中最长的回文子串. package main import "fmt" /* 马拉松算法,求最长回文子串,时间复杂度:线性 */ func main() { // 回文 ...

  3. 九度OJ 1528 最长回文子串 -- Manacher算法

    题目地址:http://ac.jobdu.com/problem.php?pid=1528 题目描述: 回文串就是一个正读和反读都一样的字符串,比如"level"或者"n ...

  4. lintcode最长回文子串(Manacher算法)

    题目来自lintcode, 链接:http://www.lintcode.com/zh-cn/problem/longest-palindromic-substring/ 最长回文子串 给出一个字符串 ...

  5. hihocoder #1032 : 最长回文子串 Manacher算法

    题目链接: https://hihocoder.com/problemset/problem/1032?sid=868170 最长回文子串 时间限制:1000ms内存限制:64MB 问题描述 小Hi和 ...

  6. 51Nod 1089 最长回文子串 V2 —— Manacher算法

    题目链接:https://vjudge.net/problem/51Nod-1089 1089 最长回文子串 V2(Manacher算法) 基准时间限制:1 秒 空间限制:131072 KB 分值:  ...

  7. hihoCoder #1032 : 最长回文子串 [ Manacher算法--O(n)回文子串算法 ]

    传送门 #1032 : 最长回文子串 时间限制:1000ms 单点时限:1000ms 内存限制:64MB 描述 小Hi和小Ho是一对好朋友,出生在信息化社会的他们对编程产生了莫大的兴趣,他们约定好互相 ...

  8. hdu5371 最长回文子串变形(Manacher算法)

    pid=5371">http://acm.hdu.edu.cn/showproblem.php? pid=5371 Problem Description Hotaru Ichijou ...

  9. 使用manacher算法解决最长回文子串问题

    要解决的问题 求一个字符串最长回文子串是什么.且时间复杂度 O(N) 具体描述可参考: LeetCode_5_最长回文子串 LintCode_200_最长回文子串 暴力解法 以每个字符为中心向左右两边 ...

随机推荐

  1. Dynamics CRM 构建IN查询

    CRM中有3种查询数据的方式,分别是QueryExpression.fetchxml.linq,本篇讲述的条件IN的查询只支持前两种,linq并不支持. QueryExpression的写法如下,示例 ...

  2. 你知道如何为iOS工程改名吗?

    我们在iOS开发中,难免会遇到项目做到一半要改名字的情况.如果项目名差的太大,工程名看起来总是不舒服的,有良心的开发者可能就会想着为工程改个贴切的名字,那么你就为用到本文记录的内容. 如果我们开发的两 ...

  3. Android性能提升之强引用、软引用、弱引用、虚引用使用

    转载请把头部出处链接和尾部二维码一起转载,本文出自逆流的鱼yuiop:http://blog.csdn.net/hejjunlin/article/details/52637333 背景:收到公众投稿 ...

  4. Android实现自动更新功能

    Android实现自动更新功能 Android自动更新的功能可以使用第三方的SDK来实现,但是类似友盟,就不支持x86手机的自动更新,科大讯飞,弹窗是全局的,小米手机就会默认把弹窗权限关掉不允许弹出提 ...

  5. nfc开发

    很多Android设备已经支持NFC(近距离无线通讯技术)了.本文就以实例的方式,为大家介绍如何在Android系统中进行NFC开发. Android NFC开发环境 使用硬件:Google Nexu ...

  6. T-SQL 中的CROSS JOIN用法(半翻译)

    突然发现个很吊的链接,我们来看看学习数据库要做些什么,胆小慎点:DBA工作内容!!!! 今天来翻译一篇关于T-SQL的文章,本文可供微软认证70-461:QueryingMicrosoft SQL S ...

  7. 2、Android构建本地单元测试

    如果你的单元测试在Android中没有依赖或者只有简单的以来,你可以在你的本地开发环境中运行你的测试.这种测试比较高效因为它能让你避免将整个app安装到物理设备或虚拟机中执行单元测试.最后,执行单元测 ...

  8. 页面中iframe中嵌入一个跨域的页面,让这个页面按照嵌入的页面宽高大小显示的方式;iframe嵌套的页面不可以编辑的问题解决方案

    <html> <head> <style> body { margin-left: 0px; margin-top: 0px; margin-right: 0px; ...

  9. (copy)赋值构造函数的4种调用时机or方法

    第一种调用方法: demo #include <iostream> using namespace std; class Text { public: Text() // 无参数构造函数 ...

  10. Java图片加文字水印

    Java图片加文字水印 import java.awt.Color; import java.awt.Font; import java.awt.Graphics; import java.awt.I ...