输出字符串的最长回文序列
来源:互联网 发布:魔幻壁纸软件 编辑:程序博客网 时间:2024/06/06 02:23
自己写的一段小代码,感觉思路还算明确,但是写的代码水准不是太高,留给有需要的小伙伴一起学习~附上代码:
import java.util.Scanner;public class TestHuiWen { public static void main(String[] args) { String str; System.out.println("请输入字符串:"); Scanner reader = new Scanner(System.in); str = reader.next(); reader.close(); forHuiWen(str); } /** * 输出一个字符串的最长回文序列 * @param str */ private static void forHuiWen(String str) { String temp = null; String []s= new String[100]; int max =0,length=0,j=0,flag=0; for(int i=0;i<str.length();i++){ temp = str.substring(i, str.length()); length = forLonger(temp).length(); if(length!=1){ s[j] = forLonger(temp); if(length>max){ max = length; flag = j; }// System.out.println(forLonger(temp)); j++; } } System.out.print(str+"的最长回文序列的长度为"+max); System.out.println(",该序列为:"+s[flag]); } /** * 返回一个字符串中以字符串第一个字符为首字符的最长回文 * 例如 输入 abcdcbade,返回 abcdcba * @param str * @return */ private static String forLonger(String str) { if(isHuiWen(str)){ return str; }else{ return forLonger(str.substring(0, str.length()-1)); } } /** * 创建一个方法,判断一个字符串是否是回文 * @param str * @return */ private static boolean isHuiWen(String str) { char[] ch = str.toCharArray(); boolean flag = true; int length = ch.length; for(int i=0;i<ch.length/2;i++){ if(ch[i]!=ch[length-1]){ flag = false; } length--; } return flag; } }
另外附上某一大神的 经典算法——最长回文子序列
是C语言编写的,留给以后看。
原文http://blog.csdn.net/geekmanong/article/details/51056375#
#include<iostream> #include<algorithm> using namespace std; //动态规划求解最长回文子序列,时间复杂度为O(n^2) int lpsDp(char *str, int n) { int dp[10][10], tmp; memset(dp, 0, sizeof(dp)); for (int i = 0; i < n; ++i) dp[i][i] = 1; for (int i = 1; i < n; ++i) { tmp = 0; //考虑所有连续的长度为i+1的子串,str[j....j+i] for (int j = 0; j + i < n; j++) { //如果首尾相同 if (str[j] == str[j + i]) tmp = dp[j + 1][j + i - 1] + 2; //如果首尾不同 else tmp = max(dp[j + 1][j + i], dp[j][j + i - 1]); dp[j][j + i] = tmp; } } return dp[0][n - 1]; //返回字符串str[0...n-1]的最长回文子序列长度 } int main() { char str[10] = "cabbeaf"; int res = lpsDp(str, strlen(str)); cout << res << endl; getchar(); return 0; }
0 0
- 输出字符串的最长回文序列
- 计算字符串的最长回文子序列
- 字符串的最长回文子序列以及最长子串
- 最长的回文字符串
- 【算法】寻找字符串中最长的回文序列
- 输出任意字符串中最长的回文长度
- 输出最长回文子序列字符数
- 求一个字符串中的最长回文序列
- 利用最长公子序列求回文字符串
- 【jzoj4889】【最长公共回文子序列】【字符串】
- 回文字符串【最长公共子序列】【DP】
- 求给定字符串中最长回文序列
- 回文字符串-最长公共子序列
- 求最长回文字符串并原样输出
- 插入最少的字符使字符串成为回文串 <最长公共子序列 + 回文>
- 求str最长回文子序列是求这个原字符串和它反转字符串的最长公共子序列。
- 字符串的最长回文字串
- 字符串的最长回文长度
- Jmeter之Json Path Extractor 接受上一个请求的响应参数
- 动态规划——121. Best Time to Buy and Sell Stock[easy]
- L1-005. 考试座位号
- 使用STS导入与搭建JAVA SSM
- 打赏功能的实现思路
- 输出字符串的最长回文序列
- effective C++——限制类所能产生的对象数量
- ubuntu16.04 无法调节音量的解决办法
- 前后台登录模板分离
- Batch Normalization
- 嵌入式学习笔记
- hihoCoder1048 : 状态压缩·二
- 线段树区间更新&&HDU1698模板
- 表格