[网易]字符串回文分割
来源:互联网 发布:软件测试书籍 知乎 编辑:程序博客网 时间:2024/05/23 13:30
【题目】
将一个很长的字符串,分割成一段一段的子字符串,子字符串都是回文字符串。有回文字符串就输出最长的,没有回文就输出一个一个的字符。
例如:habbafgh
输出h,abba,f,g,h。
【思路一】
基于“最长回文子串算法”求出当前字符串的最长回文子串,就可以分成3部分
a、最长回文子串left部分
b、最长回文子串
c、最长回文子串right部分
然后分别求a和c的最长回文子串
递归至每部分都成单个字符+当前最长回文子串,就可以分解成最终结果。
【代码一】
#include<string>#include<iostream>using namespace std;// beg end 用于返回最大回文串的范围void MaxPalindromeNumber(string str,int& beg,int& end){ int maxLen = 1,start = beg; int left,right; for(int i = beg;i <= end;i++){ //奇数字串 int oddLen = 1; left = i-1; right = i+1; while(left >= beg && right <= end && str[left] == str[right]){ left--; right++; oddLen += 2; } //更新最大长度 if(oddLen > maxLen){ maxLen = oddLen; //记录当前最大回文串的起始位置 start = left+1; } //偶数字串 left = i; right = i+1; int evenLen = 0; while(left >= beg && right <= end && str[left] == str[right]){ left--; right++; evenLen += 2; } //更新最大长度 if(evenLen > maxLen){ maxLen = evenLen; //记录当前最大回文串的起始位置 start = left+1; } } beg = start; end = start + maxLen - 1;}int index = 0;void SpilitPalindromeNumber(string str,int& beg,int& end){ int lbeg = beg; int rend = end; //beg end 返回当前最大回文串的起始点和截止点 MaxPalindromeNumber(str,beg,end); int lend = beg - 1; int rbeg = end + 1; // lbeg lend 最大回文串的左部 // rbeg rend 最大回文串的右部 if(lbeg <= lend){ SpilitPalindromeNumber(str,lbeg,lend); } //控制格式输出 if(index == 0){ cout<<str.substr(beg,end-beg+1); index++; } else{ cout<<","<<str.substr(beg,end-beg+1); index++; } if(rbeg <= rend){ SpilitPalindromeNumber(str,rbeg,rend); }}int main(){string str="djdslkAABCDEAfjdl1234321skjflkdsjfkldsababasdlkfjsdwieowowwpw";int beg = 0;int end = str.length()-1;SpilitPalindromeNumber(str,beg,end);return 0;}
【思路二】
先将给定字符串翻转,然后和原来的字符串一起,这样就变成了最长公共子序列问题。
此时可以利用动态规划的思路来完成。
关于最长公共子序列问题可以参考<算法导论>里面有详细的说明
相关链接:
[百度]2014百度校园招聘之最长回文串
[小米]2015小米校招之回文数判断
1 0
- [网易]字符串回文分割
- [网易]字符串回文分割
- 网易笔试:字符串回文分割
- 分割 回文字符串
- 求回文字符串的最小分割
- Palindrome Partitioning 分割字符串为回文@LeetCode
- Palindrome Partitioning 分割成回文子字符串
- 字符串问题---回文最小分割数
- 字符串分割成字串都是回文
- LeetCode(Palindrome Partitioning) 将字符串分割成回文字符串
- LeetCode OJ 之 Palindrome Partitioning (字符串的回文分割)
- 将给定字符串分割成多个小的回文串
- 分割字符串为回文串(每一个子串都是回文串)
- 网易 统计回文
- 网易-回文序列
- 网易统计回文
- 网易统计回文
- [网易]回文序列
- myBatis批量添加,修改和删除
- 互联网界神话——永远不要小看任何一个人
- jvm的参数含义及设置
- 关于项目管理的一点体会
- (转)WF4.0——开篇
- [网易]字符串回文分割
- Leetcode-Binary Tree Level Order Traversal
- Bootstrap分页插件--Bootstrap Paginator
- MySql弄死没得Innodb的 处理方法
- 计算机基本知识
- Test
- 在CLASSPATH中加载目录下所有的jar
- 中华两岸三地樟芝抗癌研究报告会8月30日在港举行
- UIFont字体设置