【面试笔试算法】Problem 9: 腾讯2016年研发实习笔试题:最长回文子串
来源:互联网 发布:钓鱼天气软件哪款好 编辑:程序博客网 时间:2024/05/16 14:16
(一)题目
问题:求给定字符串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,反正大致思想是这样的。
0 0
- 【面试笔试算法】Problem 9: 腾讯2016年研发实习笔试题:最长回文子串
- 腾讯2016实习笔试题(最长回文子序列)
- [2016腾讯暑期实习在线笔试题]最长回文字符串
- [2016腾讯暑期实习在线笔试题]最长回文字符串
- 笔试面试算法经典--最长回文子串
- 腾讯2016实习生笔试题 获得最长回文串长度
- 4月3日腾讯笔试题“最长回文子串”PS
- 腾讯2016实习生笔试题--求最长回文字符长度
- 腾讯2016年研发工程师笔试题
- 2014腾讯实习笔试面试
- 多益笔试:最长回文子串
- 笔试算法-最长子串
- 2016腾讯春招软件研发实习笔试
- 腾讯2016软开实习生笔试题-编程2:最大回文子串长度
- 网易2016实习研发笔试
- 腾讯2016研发工程师笔试题(三)
- 腾讯2016年校招实习笔试题
- 腾讯2016年研发工程师笔试题(一)
- C++和Lua相互传递数据
- JS 判断浏览器类型及版本,做浏览器兼容
- Oracle 11g 数据库(64 bit)的安装&卸载(PL/SQL(32 bit))
- oracle备份数据库
- iphone开源项目list
- 【面试笔试算法】Problem 9: 腾讯2016年研发实习笔试题:最长回文子串
- Python 正则re模块之compile()和findall()详解
- EventBus框架源码分析
- Html标签中thead、tbody、tfoot的作用
- MySql入门
- 微博主页面布局思路
- 报错Binary XML file line # : Error inflating class
- (视图)初步学习
- HTML学习之表格表单及框架介绍