求解最大回文字符串长度 — 三种算法
来源:互联网 发布:小蚂蚁微信编辑器源码 编辑:程序博客网 时间:2024/05/16 13:50
中心扩展法
int findLongestPalindrome(string &s) { const int length = s.size(); int maxlength = 0; // 长度为奇数 for (int i=0; i<length; i++) { int j=i-1, k=i+1; while (j>=0 && k<length && s.at(j)==s.at(k)) { if(k-j+1 > maxlength) maxlength = k-j+1; j--; k++; } } // 长度为偶数 for (int i=0; i<length; i++) { int j=i, k=i+1; while (j>=0 && k<length && s.at(j)==s.at(k)) { if(k-j+1 > maxlength) maxlength = k-j+1; j--; k++; } } return maxlength;}
Manacher
int Manacher(char *st,int len){ int mx=0, ans=0, po=0; for (int i=1; i<=len; i++) { if (mx > i) Len[i] = min(mx-i, Len[2*po-i]); else Len[i] = 1; while (st[i-Len[i]] == st[i+Len[i]]) Len[i]++; if (Len[i]+i > mx) { mx = Len[i]+i; po = i; } ans = max(ans, Len[i]); } return ans-1;}
动态规划
public int longestPalindrome(String s) { int n=s.length(); boolean[][] pal=new boolean[n][n]; //pal[i][j] 表示s[i...j]是否是回文串 int maxLen=0; for (int i=0;i<n;i++){ // i作为终点 int j=i; //j作为起点 while (j>=0){ if (s.charAt(j)==s.charAt(i)&&(i-j<2||pal[j+1][i-1])){ pal[j][i]=true; maxLen=Math.max(maxLen, i-j+1); } j--; } } return maxLen;}
0 0
- 求解最大回文字符串长度 — 三种算法
- 一种快速求解最长回文字符串长度的算法
- 算法3—找出字符串中对称的子字符串的最大长度(最长回文)
- 字符串的最大回文长度
- 回文字符串的最大长度
- 关于c++最大回文的字符串长度
- 字符串中最大的回文长度
- 求字符串中最大的回文长度
- 求字符串中的回文最大长度
- 查找字符串的最大回文长度
- 最大回文字串长度-manacher算法
- 字符串中对称字符串的最大长度(最长回文)
- 最大回文长度
- 刷题基础----Manacher算法求解最大回文子串
- 动态规划算法求解最大公共字符串
- 字符串中单词的个数以及最大长度单词求解
- 对称字符串的最大长度 — 曼彻斯特算法
- C#找出字符串中最大长度的回文
- 337_图片轮播器使用button
- Android开发中的动画(下)--属性动画Property Animation
- Caffe 在自己的数据库上训练步骤
- line-height 的作用
- hdu5826physics+数学积分
- 求解最大回文字符串长度 — 三种算法
- 对于Dialog、Toast和Snackbar的二次熟悉
- iOS开发 _计算缓存大小/清理
- mouseout 和mouseleave 使用的区别
- mysql 常用命令(二)
- myeclipse中选择别的版本的jdk
- 广播
- Ubuntu 恢复AndroidStudio、Clion 、Intelij 快捷方式(Dash)
- D3D11教程十九之PlannarReflection(基于RTT技术和投影纹理技术)