java算法-java求教,算法竞赛入门经典 3.4 最长回文子串

问题描述

java求教,算法竞赛入门经典 3.4 最长回文子串

java新手求教,关键是怎么保存s[i]在buf中的位置,谢谢

解决方案

string longestPalindromeDP(string s) {
int n = s.length();

int longestBegin = 0;

int maxLen = 1;

bool table[1000][1000] = {false};

for (int i = 0; i < n; i++) {

table[i][i] = true;   //前期的初始化

}

for (int i = 0; i < n-1; i++) {

if (s[i] == s[i+1]) {

  table[i][i+1] = true; //前期的初始化

  longestBegin = i;

  maxLen = 2;

}

}

for (int len = 3; len <= n; len++) {

for (int i = 0; i < n-len+1; i++) {

  int j = i+len-1;

  if (s[i] == s[j] && table[i+1][j-1]) {

    table[i][j] = true;

    longestBegin = i;

    maxLen = len;

  }

}

}

return s.substr(longestBegin, maxLen);

}
这个是时间复杂度为O(n2)的

解决方案二:

好像,好复杂的样子啊!

时间: 2024-08-22 09:21:55

java算法-java求教,算法竞赛入门经典 3.4 最长回文子串的相关文章

java算法-Longest Palindromic Substring 最长回文子串问题?JAVA

问题描述 Longest Palindromic Substring 最长回文子串问题?JAVA public class Solution { public String longestPalindrome(String s) { String ret = ""; for (int i = 0; i < s.length(); i++) { for (int j = 0; i - j >= 0 && i + j < s.length(); j++)

lintcode最长回文子串(Manacher算法)

题目来自lintcode, 链接:http://www.lintcode.com/zh-cn/problem/longest-palindromic-substring/ v最长回文子串  给出一个字符串(假设长度最长为1000),求出它的最长回文子串,你可以假定只有一个满足条件的最长回文串. v样例 给出字符串 "abcdzdcab",它的最长回文子串为 "cdzdc". v挑战 O(n2) 时间复杂度的算法是可以接受的,如果你能用 O(n) 的算法那自然更好.

hihocoder 算法-我的hihocoder这个最长回文子串为什么报wrong answer?

问题描述 我的hihocoder这个最长回文子串为什么报wrong answer? import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); int n = scanner.nextInt(); for(int i = 0;i String str = scanner.next(); System.

[算法系列之七]Manacher算法之最大回文子串

回文串定义:"回文串"是一个正读和反读都一样的字符串,比如"level"或者"noon"等等就是回文串. 回文子串,顾名思义,即字符串中满足回文性质的子串. 经常有一些题目围绕回文子串进行讨论,比如  HDOJ_3068_最长回文,求最长回文子串的长度.朴素算法是依次以每一个字符为中心向两侧进行扩展, 显然这个复杂度是 O(N^2)的,关于字符串的题目常用的算法有 KMP.后缀数组. AC 自动机,这道题目利用扩展 KMP可以解答,其时间复杂度也

Java实现查找当前字符串最大回文串代码分享_java

先看代码 public class MaxHuiWen { public static void main(String[] args) { // TODO Auto-generated method stub String s = "abb"; MaxHuiWen(s); } //1.输出回文串 public static void MaxHuiWen(String s){ //存储字符串的长度 int length = s.length(); //存储最长的回文串 String M

[Java 泥水匠] Java Components 之二:算法篇之项目实践中的位运算符(有你不懂的哦)

2.1 前言   自从上篇[Java 泥水匠] Java Components 之一:Java String (肯定有你不懂的泥瓦匠很快又和你们聊起来了.写的还不错~ 要时刻对自己说: 得到殊荣也是昨天,看在眼里的只有今天.等待明天的只有死亡和坟墓. 回到正题,今天是讲位运算的,肯定有你不知道的.提纲: 2.2    异或基本算法 2.2.1  补充例子异或加密解密 2.3   '按位与'运算 就是那么简单 2.4    从非中,学习原码补码运算 2.5    综合算法现实案例 2.6    总

算法:uva 11404 Palindromic Subsequence(LCS回文串,最小字典序)

题目大意 给一个字符串,输出它的最长回文串,如果有多个结果,输出字典序最小的. 思 路 我们都知道把一个字符串逆序后和原字符串进最长公共子序列,可以计算出它的最长回文串长度. 但是这题不仅要输出回文串,而且还要求是字典序最小的,所以挺难搞的. 设str1是正序字符串, str2是逆序后的字符串 f[i][j].len 表示str1的前i位,str2的前j位,最长公共子串的长度 f[i] [j].str 表示str1的前i位,str2的前j位,最长公共子串的最小字典序的字符串 状态转移和正常的LC

Java实现从文本中查找最长的回文字符串

1 * 难度:初级 2 * 问题:从输入文件calfflac.in中读取文本,找到最长的回文串(翻转之后和它自己相等的字符串),只考虑字母,不区分大小写 3 * 输出最长回文串的长度,并且输出它在原文中的对应的串.如果多个回文串长度相等,输出第一个. 4 * 注:该题目来自:http://ace.delos.com/usacogate,有兴趣的朋友可以去上面注册,很好的练习平台. 5*/ 6import java.util.*; 7import java.io.*; 8class calffla

[经典面试题]回文串专题

[小米]2015小米校招之回文数判断 [百度]2014百度校园招聘之最长回文串 [网易]字符串回文分割 [创新工场]2014创新工场校园招聘之回文串修复 [算法]Manacher算法之最大回文子串 [LeetCode]9.Palindrome Number [LeetCode]125.Valid Palindrome [LeetCode]131.Palindrome Partitioning [LeetCode]132.Palindrome Partitioning II