第一种:

public static void main(String[] args) {
String s = "abcbaaaaabcdcba";
int n,m;
String re = "";
for(int i = ; i < s.length();i++){
for(int j = i+;j< s.length();j++){
n = i;
m = j;
for(;j > i;j--,i++){
if(s.charAt(i) != s.charAt(j))
break;
}
if(j <= i){
if(m-n > re.length())
re = s.substring(n, m+);
}
}
}
System.out.println(re);
}

看的是国外的一篇博客,他把这种方法叫做是Naive Approach,这是最容易想到的一个方法,效率确实不怎样,时间复杂度是O(n^3)级。

第二种方法:

public static void main(String[] args) {

        String s = "abcbaaaaabcdcba";

        int[][] table = new int[s.length()][s.length()];
int i, j;
for (i = ; i < s.length(); i++)
for (j = ; j < s.length(); j++)
table[i][j] = ;
for (i = ; i < s.length(); i++) {
for (j = ; j < s.length(); j++) {
if (j + i >= s.length()) {
break;
}
if (j == j + i)
table[j][j + i] = ;
else if (j + == j + i) {
if (s.charAt(j) == s.charAt(j + i))
table[j][j + i] = ;
} else {
if (s.charAt(j) == s.charAt(j + i)
&& table[j + ][j + i - ] == )
table[j][j + i] = ;
}
}
}
for (i = ; i < s.length(); i++) {
for (j = ; j < s.length(); j++) {
System.out.print(table[i][j] + " ");
table[i][j] = ;
}
System.out.println();
}
}

这个算法的思路:

构建一个n*n的表格,表格中table[i][j] == 1代表子串(i,j)是回文串,table[i][j] ==0即代表子串(i,j)不为回文串,并且有这样的推算规则:

1)table[i][i]必为1;

2)table[i][i+1]==1的满足条件是:s.charAt(i) == s.charAt(i+1);

3)其他table[i][j] == 1 的满足条件是:s.charAt(i) == s.charAt(j) && table[i+1][j-1] == 1.

该算法的时间复杂度为 O(n^2), 空间复杂度 O(n^2)。

面试常用算法——Longest Palindromic Substring(最长回文子串)的更多相关文章

  1. Leetcode 5. Longest Palindromic Substring(最长回文子串, Manacher算法)

    Leetcode 5. Longest Palindromic Substring(最长回文子串, Manacher算法) Given a string s, find the longest pal ...

  2. 5. Longest Palindromic Substring(最长回文子串 manacher 算法/ DP动态规划)

    Given a string s, find the longest palindromic substring in s. You may assume that the maximum lengt ...

  3. LeetCode:Longest Palindromic Substring 最长回文子串

    题目链接 Given a string S, find the longest palindromic substring in S. You may assume that the maximum ...

  4. lintcode :Longest Palindromic Substring 最长回文子串

    题目 最长回文子串 给出一个字符串(假设长度最长为1000),求出它的最长回文子串,你可以假定只有一个满足条件的最长回文串. 样例 给出字符串 "abcdzdcab",它的最长回文 ...

  5. [LeetCode] 5. Longest Palindromic Substring 最长回文子串

    Given a string s, find the longest palindromic substring in s. You may assume that the maximum lengt ...

  6. 【LeetCode】5. Longest Palindromic Substring 最长回文子串

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 公众号:负雪明烛 本文关键词:最长回文子串,题解,leetcode, 力扣,python ...

  7. [leetcode]5. Longest Palindromic Substring最长回文子串

    Given a string s, find the longest palindromic substring in s. You may assume that the maximum lengt ...

  8. 【翻译】Longest Palindromic Substring 最长回文子串

    原文地址: http://articles.leetcode.com/2011/11/longest-palindromic-substring-part-i.html 转载请注明出处:http:// ...

  9. 1. Longest Palindromic Substring ( 最长回文子串 )

    要求: Given a string S, find the longest palindromic substring in S. (从字符串 S 中最长回文子字符串.) 何为回文字符串? A pa ...

  10. 005 Longest Palindromic Substring 最长回文子串

    Given a string s, find the longest palindromic substring in s. You may assume that the maximum lengt ...

随机推荐

  1. JS 把 Wed Jul 15 2015 00:00:00 GMT+0800 转换成2015-07-15

    function strlen(str) { var len = 0; for (var i = 0; i < str.length; i++) { var c = str.charCodeAt ...

  2. enum枚举类型 的用法

    1.作为数组下标使用 enun  box{pencil, ruler}; void main() { string s[2]; s[pencil]="pencil"; s[rule ...

  3. OC语法3——点语法,self关键字

    点语法:   为了给程序员提供便捷,OC中也引入了点语法.不过它和Java中点语法的意义是完全不同的. 在Java中无论调用任何方法,还是访问public类型的成员变量都是用点语法(.号). 而在OC ...

  4. jq方法

    DOM属性-获取和设置页面元素的DOM属性 .addClass()..attr()..prop()..hasClass()..html()..removeAttr()..removeClass().. ...

  5. mini-httpd源码分析-port.h

    针对不同系统的宏定义,对于Linux而言 /* port.h - portability defines */ #elif defined(linux) # define OS_Linux # def ...

  6. verilog中阻塞复制,非阻塞复制,顺序块,并行块之间的关系

    这几个概念是不一样的 顺序块:顺序块中的语句是按顺序执行的,每条语句中的延迟值是与其前一条语句执行的仿真时间有关. 并行块:并行块语句是并行执行的,它里面的每条语句中指定的延迟值都是相对于语句块开始执 ...

  7. Distributed Machine Learning Toolkit

    http://www.dmtk.io http://www.dmtk.io/download.html

  8. IOS 访问系统粘贴板

    粘贴板提供了一种核心OS特性,用于跨应用程序共享数据.用户可以跨应用来复制粘贴,也可以设置只在本应用中复制粘贴用来保护隐私. UIPasteboard类允许访问共享的设备粘贴板以及内容,下面代码返回一 ...

  9. Linux进程管理命令

    CentOS默认并没有安装上psmisc这个软件包,就是像pstree,fuser这类的命令就没有了.如果想要执行这些命令最好的方法就是手动的去安装它们 解决方法: yum -y install ps ...

  10. Windows平台内核级文件访问

    1.背景     在windows平台下,应用程序通常使用API函数来进行文件访问,创建,打开,读写文件.从kernel32的CreateFile/ReadFile/WriteFile函数,到本地系统 ...