LeetCode|5.最长回文子串(Java)

原创 2018年04月17日 19:58:56

给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 的最大长度为1000。

示例 1:

输入: "babad"
输出: "bab"
注意: "aba"也是一个有效答案。

示例 2:

输入: "cbbd"
输出: "bb"

正确代码:

package LeetCode;

public class A5最长回文子串 {
	public String longestPalindrome(String s) {
		if (s.length() == 1) {
			return s; // 如果就一个字符,返回该字符
		}
		if (s.length() == 2) { // 如果有两个字符
			if (s.charAt(0) == s.charAt(1)) { // 两个字符一样,返回该字符串
				return s;
			} else { // 两个字符不一样,返回第一个字符
				String string = new String();
				string += s.charAt(0);
				return string;
			}
		}
		int longest = 0; // 当前最长回文长度
		String longestString = new String(); // 当前最长回文
		for (int i = 1; i < s.length(); i++) {
			int temp = 0;
			int count = 0; // 当前回文长度
			String tempString = new String(); // 当前回文
			if (s.charAt(i) == s.charAt(i - 1)) { // 如果多个相同的字符重复
				int ii = i + 1;
				while (ii < s.length() && s.charAt(i) == s.charAt(ii)) {
					temp++;
					ii++;
				}
				count = temp + 2;
				if (count > longest) {
					longest = count;
					while ((count--) != 0) {
						tempString += s.charAt(i);
					}
					longestString = tempString;
				}
				temp = 0;
				count = 0;
				tempString = new String();
			}
			if ((i < s.length() - 1 && s.charAt(i) == s.charAt(i - 1))) { // 以两个字符为中心对称
				int iFront = i - 1;
				int iBack = i;
				while (iFront >= 0 && iBack < s.length() && (s.charAt(iFront) == s.charAt(iBack))) {
					temp++;
					iFront--;
					iBack++;
				}
				count = temp * 2;
				if (count > longest) {
					longest = count;
					for (int j = i - temp; j < i + temp; j++) {
						tempString += s.charAt(j);
					}
					longestString = tempString;
				}
				temp = 0;
				count = 0;
				tempString = new String();
			}
			
			//以一个字符为中心对称
			int iFront = i - 1;
			int iBack = i + 1;
			while (iFront >= 0 && iBack < s.length() && (s.charAt(iFront) == s.charAt(iBack))) {
				temp++;
				iFront--;
				iBack++;
			}
			count = temp * 2 + 1;
			if (count > longest) {
				longest = count;
				for (int j = i - temp; j <= i + temp; j++) {
					tempString += s.charAt(j);
				}
				longestString = tempString;
			}
		}
		System.out.println(longest);
		return longestString;
	}

	public static void main(String[] args) {
		A5最长回文子串 a5最长回文子串 = new A5最长回文子串();
		String s1 = new String("babad");
		String s2 = new String(
				"azwdzwmwcqzgcobeeiphemqbjtxzwkhiqpbrprocbppbxrnsxnwgikiaqutwpftbiinlnpyqstkiqzbggcsdzzjbrkfmhgtnbujzszxsycmvipjtktpebaafycngqasbbhxaeawwmkjcziybxowkaibqnndcjbsoehtamhspnidjylyisiaewmypfyiqtwlmejkpzlieolfdjnxntonnzfgcqlcfpoxcwqctalwrgwhvqvtrpwemxhirpgizjffqgntsmvzldpjfijdncexbwtxnmbnoykxshkqbounzrewkpqjxocvaufnhunsmsazgibxedtopnccriwcfzeomsrrangufkjfzipkmwfbmkarnyyrgdsooosgqlkzvorrrsaveuoxjeajvbdpgxlcrtqomliphnlehgrzgwujogxteyulphhuhwyoyvcxqatfkboahfqhjgujcaapoyqtsdqfwnijlkknuralezqmcryvkankszmzpgqutojoyzsnyfwsyeqqzrlhzbc");
		System.out.println(a5最长回文子串.longestPalindrome(s2));
	}
}
这道题要考虑的东西比较多。
a:a
aa:aa
ab:a
aaa:aaa
ababd:aba/bab
abaccaba:abac

leetcode解题之5. Longest Palindromic Substring Java版(最长回文子串)

leetcode解题之5. Longest Palindromic Substring Java版(最长回文子串)
  • mine_song
  • mine_song
  • 2017-04-06 13:07:10
  • 263

Leetcode#5. Longest Palindromic Substring(最长回文子串:二种解法)

题目Given a string s, find the longest palindromic substring in s. You may assume that the maximum len...
  • xunalove
  • xunalove
  • 2017-08-26 21:10:57
  • 480

Leetcode: 5 Longest Palindromic Substring 最长回文子串

Discription:Given a string s, find the longest palindromic substring in s. You may assume that the m...
  • BeforeEasy
  • BeforeEasy
  • 2018-03-21 19:40:29
  • 7

LeetCode 5. Longest Palindromic Substring 最长回文子串 Python 四种解法(Manacher 动态规划)

Longest Palindromic Substring 最长回文子串 学习笔记 1. Brute method 第一种方法:直接循环求解,o(n2)o(n^2) class Sol...
  • asd136912
  • asd136912
  • 2018-01-06 11:41:46
  • 586

【LeetCode-面试算法经典-Java实现】【005-Longest Palindromic Substring(最长回文子串)】

【005-Longest Palindromic Substring(最长回文子串)】给定一个字符串S,找出它的最大的回文子串,你可以假设字符串的最大长度是1000,而且存在唯一的最长回文子串。动态规...
  • DERRANTCM
  • DERRANTCM
  • 2015-07-17 06:42:01
  • 2951

leetcode 第五题 最长回文子串

http://www.tuicool.com/articles/n6NfIrN 动态规划刚刚重新学,这道题实在想不出来,百度了一下才发现 动态规划的时间复杂度最少都n方。。。。。。。。。...
  • a498506133
  • a498506133
  • 2016-09-18 14:54:43
  • 659

Longest Palindromic Substring 在一个字符串里找最长回文子串@LeetCode

题目是不难(思路好想),但要细心写才不会错!特别注意到有偶数个和奇数个palindrome的情况,以及两者的优先级不同! package Level4; /** * Longest Pali...
  • hellobinfeng
  • hellobinfeng
  • 2013-11-10 07:02:20
  • 2545

leetcode第五题—最长回文字符串

最长回文字符串(Longest Palindromic Substring ) 1.中心结点法,时间复杂度为O(n^2) 回文字符串都是对称的,有两种对称方式,一是关于字符对称,比...
  • kesonyk
  • kesonyk
  • 2015-07-23 17:52:53
  • 939

【LeetCode 214】最长回文子串

题目链接: https://leetcode.com/problems/shortest-palindrome/ 题目描述: 给一个字符串s, 求在其前方添加最少的字符使添加后的s是回文串,并返...
  • zhong123123123
  • zhong123123123
  • 2016-05-06 13:07:33
  • 653

Longest Palindromic Substring--求字符串最长回文子串 - Leetcode

Given a string s, find the longest palindromic substring in s. You may assume that the maximum len...
  • USTC_Zn
  • USTC_Zn
  • 2017-02-22 10:37:29
  • 147
收藏助手
不良信息举报
您举报文章:LeetCode|5.最长回文子串(Java)
举报原因:
原因补充:

(最多只允许输入30个字)