输出字符串的最长回文序列

xiaoxiao2021-02-28  99

自己写的一段小代码,感觉思路还算明确,但是写的代码水准不是太高,留给有需要的小伙伴一起学习~附上代码:

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; }
转载请注明原文地址: https://www.6miu.com/read-61048.html

最新回复(0)