给定一个字符串s,找出最长的回文子串
来源:互联网 发布:海洋cms采集插件 编辑:程序博客网 时间:2024/05/22 12:39
思路1:
1 从每一个回文对称点开始向左右遍历,直到左右字符不相等。求出最长子串。
2 考虑回文子串可能是奇数长度,对称点只有一个。也可能是偶数长度。对称点有俩个
代码:
string longestPalindrome(string s) { int len=s.length(); string result=""; if(len==0) return result; for(int i=0;i<len;i++){ //对称点是奇数点 int left=i; int right=i; while(left>0&&right<len-1&&s[left-1]==s[right+1]){ left--; right++; } if(right-left+1>result.length()){ result=s.substr(left,right-left+1); } } for(int i=0;i<len;i++){ //对称点是偶数点 if(s[i]==s[i+1]){ //俩个对称点 int left=i; int right=i+1; while(left>0&&right<len-1&&s[left-1]==s[right+1]){ left--; right++; } if(right-left+1>result.length()){ result=s.substr(left,right-left+1); } } } return result; }
思路2:
动态规划
string longestPalindrome(string s) { int len=s.length(); string result=""; if(len==0) return result; int maxLen=0; int start=0; int end=0; vector<vector<bool>> dp(len,vector<bool>(len,false)); for(int j=0;j<len;j++){ for(int i=0;i<j;i++){ if(s[i]==s[j]&&(j-i<=2||dp[i+1][j-1])){ dp[i][j]=true; if(j-i+1>maxLen){ maxLen=j-i+1; start=i; end=j; } } } } return s.substr(start,end-start+1); }
思路3
遍历字符串,每次先查找相同的字符数量,然后下一个起始位置就是不相同的字符。
string longestPalindrome(string s) { int len=s.length(); if(len==0) return ""; int maxLen=1; int start=0; int left=0; int right=0; for(int i=0;i<len&&len-i>maxLen/2;){ left=i; right=i; while(right<len-1&&s[right+1]==s[right]) //重复字符 right++; i=right+1; //下一次字符的起始位置 while(right<len-1&&left>0&&s[left-1]==s[right+1]){ right++; left--; } if(maxLen<right-left+1){ maxLen=right-left+1; start=left; } } return s.substr(start,maxLen); }
阅读全文
0 0
- 给定一个字符串s,找出最长的回文子串
- 给定一个字符串,找出该字符串的最长回文子串
- leetcode-java.T005_LongestPalindromicSubstringTotal 给定一个字符串S,找出它的最大的回文子串
- 给定一个字符串,求它的最长回文子串的长度,并打印出最长回文子串
- 找出一个字符串中最长回文子串
- 在一个字符串中,找出最长回文子串
- 求给定字符串的最长回文子串
- 题目描述 给定一个字符串,找出该字符串的最长回文子串。回文字符串指的就是从左右两边看都一样的字符串,如aba,cddc都是回文字符串。字符串abbacdc存在的回文子串有abba和cdc,因此它的最长
- 给定一个字符串,输出最长的重复子串
- 给定一个字符串,求出其最长的重复子串
- 给定一个字符串,求出其最长的重复子串。
- 给定一个字符串,求出其最长的重复子串。
- 给定一个字符串,输出最长的重复子串
- 给定一个字符串,求出其最长的重复子串
- 给定一个字符串,求出其最长的重复子串。
- 找出最长回文子串
- 给定一个字符串s,你可以从中删除一些字符,使得剩下的串是一个回文串。如何删除才能使得回文串最长呢?
- 一个字符串的最长回文子串的长度
- SQLAlchemy ORM教程之二:Query
- ios11.1版本迭代更新
- Hibernate和spring中的session问题整理
- 配置JAVA的环境变量
- 逻辑回归实现癌症预测(无框架实现)
- 给定一个字符串s,找出最长的回文子串
- 【第八周】项目3(1)-对称矩阵的压缩与存储应用
- ecshop价格为0时显示议价
- 34岁!100天!学会Java编程(Day10)——实战项目复盘
- MySq格式化数字-自动补0
- python-OCR识别图片字符
- <Android>监听软键盘打开收起事件(软键盘自带收起按钮)
- 大学之道,在明明德,在亲民,在止于至善
- js的各种宽高获取