动态规划解回文
2016-01-31 15:49
302 查看
class Solution { public: string longestPalindrome(string s) { int len = s.length(); int max_length = 0; int begin_index = 0; // table[i][j] 表示从i到j的字符串是否为回文 bool table[1001][1001] = {false}; for (int i = 0; i < len; ++i) { table[i][i] = true; max_length = 1; begin_index = i; } for (int i = 0; i < len - 1; ++i)// 计算长度为2的子串是否为回文 { if (s[i] == s[i+1]) { table[i][i+1] = true; max_length = 2; begin_index = i; } } for (unsigned int l = 3; l <= len; ++l)// 回文子串的长度 { for (unsigned int start = 0; start < len - l + 1; ++start)// 子串的起始位置 { int end = l + start - 1;// 子串的结束位置 if (table[start+1][end-1] && s[start] == s[end]) { table[start][end] = true; if (l > max_length) { max_length = l; begin_index = start; } } } } return string(s, begin_index, max_length); } };
相关文章推荐
- SPOJ 196 MUSKET - Musketeers 火枪手 环类问题
- 冒泡排序
- 抽屉效果
- 排序和正则表达式的应用
- 快速排序
- 归并排序
- 状态模式
- MySQl的使用笔记
- json城市下拉列表
- 类加载
- ODSO ZCELT002 -> ODSO ZCELT052
- 从头认识Spring-1.7 怎样通过属性注入Bean?(1)-怎样通过属性向对象注入值?
- CSR8670 LED/GPIO的使用
- CAS实现SSO单点登录原理
- Angular的Directive,以及copmile和link方法
- 笔记
- 解析C#中的分部类和分部方法
- <<富爸爸成功创业的10堂必修课>>笔记
- HDU_5617Jam's maze
- 链表倒K元素查找问题