回文字符串编程题
来源:互联网 发布:暴利产品淘宝客推广 编辑:程序博客网 时间:2024/04/30 11:02
一、概述
1.1、回文字符串
所谓回文字符串,就是一个从左到右读和从右到左读是完全一样的字符串,比如"aba"。
1.2、回文子串与回文子序列
子串是原字符串中连续的一段字符串,而子序列则是由原来的字符串删减掉若干不连续字符后的一个字符序列。
二、求最长回文子串
动态规划法:
- 用布尔型数组dp[i][j]的值表示子串str[i..j]是否为回文
- 将dp[i][i](0<i<n)赋值为true,表示每个字符均是一个回文字符串
- dp[i][j] = (dp[j+1][k-1]&&str.charAt(j)==str.charAt(k))
public String LongestHuiWenSubString(String str){int len = str.length();//若字符串str的子串str.substring(i,j)为回文串,则dp[i][j]为true,否则为falseboolean[][] dp = new boolean[len][len];dp[0][0] = true;for(int i=1;i<len;i++){//单个字符的字符串都是回文字符串dp[i][i] = true;//后面的for循环中的i=2时需要用到dp[i][i-1] = true;}//start表示回文字符串的开始位置,end表示结束位置int start = 0,end = 1;for(int i=2;i<=len;i++){for(int j=0;j<len-i+1;j++){int k = j+i-1;if(dp[j+1][k-1]&&str.charAt(j)==str.charAt(k)){dp[j][k] = true;if((end-start)<i){start = j;end = k+1;}}}}return str.substring(start, end);}三、求最长回文子序列的长度
动态规划法:
- 用整形数组dp[i][j]的值表示子串str[i..i+j-1](从第i个字符开始,长度为j的子串)的最长回文子序列长度
- 分别将长度为0和1的子串的最长回文子序列长度赋值为0和1
if(str.charAt(j)==str.charAt(j+i-1)){<span style="white-space:pre"></span>dp[j][i] = dp[j+1][i-2]+2;}else{dp[j][i] = Math.max(dp[j][i-1], dp[j+1][i-1]);}
public int LengthOfLongestHuiWenSubSequence(String str){int len = str.length();//数组dp[i][j]的值表示子串str[i...i+j-1](从第i个字符开始,长度为j的子串)的最长回文子序列长度int[][] dp = new int[len][len+1];for(int i=0;i<len;i++){dp[i][0] = 0;dp[i][1] = 1;}for(int i=2;i<=len;i++){for(int j=0;j<len-i+1;j++){if(str.charAt(j)==str.charAt(j+i-1)){dp[j][i] = dp[j+1][i-2]+2;}else{dp[j][i] = Math.max(dp[j][i-1], dp[j+1][i-1]);}}}return str.length()-dp[0][len];}
0 0
- 回文字符串编程题
- 挑战编程:回文字符串
- 回文字符串 笔试题
- 回文字符串 基础题
- [编程题]回文序列
- [编程题] 回文序列
- [编程题] 构造回文
- [编程题] 制造回文
- [编程题] 制造回文
- [编程题] 统计回文
- [编程题] 回文序列
- [编程题] 回文序列
- [编程题]回文序列
- [编程题]回文解码
- [编程题]构造回文
- 编程之美回文字符串,DP
- GEEK编程练习— —回文字符串
- [编程之美-06]字符串回文判断
- HEVC视频编码技术
- LeetCode 1. Two Sum
- Windows动态窗口创建
- 远程控制TOMCAT启动
- 菜鸟流程-Touching App(2)- 设置界面
- 回文字符串编程题
- 文件之索引文件
- AF_INET 和 PF_INET
- PHPStorm2016 注册
- Hadoop-Shuffle过程
- Android开发:setAlpha()方法和常用RGB颜色表----颜色, r g b分量数值(int), 16进制表示 一一对应
- 双向数据绑定---AngularJS的基本原理学习
- error和exception有什么区别
- boost 环境搭建笔记