LeetCode题解 #5 Longest Palindromic Substring

Given a string S, find the longest palindromic substring in S. You may assume that the maximum length of S is 1000, and there exists one unique longest palindromic substring.

在给定一个字符串S中,找到最长的回文串。

很恶心的一道题,不过应该都能想到枚举,从第一个开始枚举。枚举的字母向两头延伸,如果相同则继续,不同则开始下一个枚举。用一个全局变量来保存最长的字符串。

不过用JAVA的话,还是别用String这个类所提供的函数了,因为很耗时。主要体现在构建和取子串这个地方。所以我把S弄成了一个数组。

还有一点要注意的事,回文串存在奇数和偶数的情况。比如bab,这样枚举到a就能找到。但如果是baab呢?他也是回文串,但用枚举的方法就会出问题。

一个解决办法就是在字符串中加入一个通用的符号,每隔一个字符加一个,这样就能保证是奇数了。比如b#a#b,b#a#a#b。可以用枚举。

一定要在字符的开头和末位加入#,不然有可能找到同样长的子串。a#b#c#c  会找到 #b# 和 c#c

因为题目说要找回文串,所以肯定能找到一个回文串的,也不会找到同样长的。这点不用担心。

思路:

1、把字符串弄成数组,过程中加入#号。

2、然后每个字符枚举,向两边延伸。

3、记录当前最长的回文串,注意不用取子串。用数组下标。

4、找到最长的回文串,去掉#。

public class Solution {

	public String longestPalindrome(String s) {

	       String longest_string = "";

	       int max = 0;
	       int max_left = 0;
	       int max_right = 0;

	       //是在两个字母之间填一个# 使得整个字符串都为奇数

	       	String s_temp = "";

	       	int n = s.length();

	       	char [] temp = new char[n+n+1];

	   		for(int i=1,j=0;j<n;j++,i+=2){

	   			temp[i]=s.charAt(j);
	   		}

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

	   			temp[i] = ‘#‘;

	   		}

	   		//查看数组
	   		/*
	   		for(int i=0;i<n+n+1;i++)
	   			System.out.println(temp[i]);
	   		*/

	   		n = n+n+1;

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

	    	   //System.out.println("begin"+i);

	    	   int left = i;
	    	   int right = i;

	    	   //从该点延伸
	    	   while(left>0&&right<n-1&&temp[left-1]==temp[right+1]){

	    		   left--;
	    		   right++;

	    	   }

	    	   //如果该点得到的回文串比上一次长
	    	   if(right-left+1>=max){

	    	       max = right-left+1;

	    		   //记下这个时候的left 和 right即可

	    	       max_left = left;
	    	       max_right = right;

	    	   }

	       }

	       /*
	       System.out.println(max_right);
	       System.out.println(max_left);

	       System.out.println(temp[max_right]);
	       System.out.println(temp[max_left]);
	       */

	       String result = "";

	       //将left和right段的字符加起来
	       for(int i=max_left;i<=max_right;i++){

	    	  if(temp[i]!=‘#‘){

	    		  //System.out.println(temp[i]);

	    		  result += temp[i];
	    	  }

	       }

	       return result;

	    }
}

  

时间: 2024-10-26 08:26:43

LeetCode题解 #5 Longest Palindromic Substring的相关文章

【LeetCode OJ】Longest Palindromic Substring

题目链接:https://leetcode.com/problems/longest-palindromic-substring/ 题目:Given a string S, find the longest palindromic substring in S. You may assume that the maximum length of S is 1000, and there exists one unique longest palindromic substring. 解题思路:p

【LeetCode】005 Longest Palindromic Substring

题目:LeetCode 005 Longest Palindromic Substring Given a string S, find the longest palindromic substring in S. You may assume that the maximum length of S is 1000, and there exists one unique longest palindromic substring. 题意:字符串S,找到S中的最长回文子串.假定S最长为100

LeetCode OJ:Longest Palindromic Substring(最长的回文字串)

Given a string S, find the longest palindromic substring in S. You may assume that the maximum length of S is 1000, and there exists one unique longest palindromic substring. 玩了两天dota2,罪过罪过,还是应该老老实实刷题啊. 题目求得是最长的回文子串,这里使用的是暴力的解法,也就是解决两种回文"asdsa"以

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

题目: Given a string S, find the longest palindromic substring in S. You may assume that the maximum length of S is 1000, and there exists one unique longest palindromic substring. 思路:用Manacher算法得到最大回文子串的长度,得到带#的最大回文子串,用split剔除#后转化成String形式输出即可. public

【leetcode】5. Longest Palindromic Substring

题目描述: Given a string S, find the longest palindromic substring in S. You may assume that the maximum length of S is 1000, and there exists one unique longest palindromic substring. 解题分析: 之前百度实习生面试也被问到这个问题.这个题比较简单.就是在分别考虑对称字符字串为奇数和偶数的情况,在不超过字符串范围的情况下向

LeetCode No.5 Longest Palindromic Substring

Given a string S, find the longest palindromic substring in S. You may assume that the maximum length of S is 1000, and there exists one unique longest palindromic substring. 最长回文子串. 有两种思路: 1,从左向右找对称点,从对称点(或者两个相同的相邻字符)向两边搜索,记下搜到的最大长度. 2,设置一个二维bool数组,

LeetCode(3)题解: Longest Palindromic Substring

https://leetcode.com/problems/longest-palindromic-substring/ 题目: Given a string S, find the longest palindromic substring in S. You may assume that the maximum length of S is 1000, and there exists one unique longest palindromic substring. 思路: 我的思路是遍

LeetCode 题解之 5. Longest Palindromic Substring

5. Longest Palindromic Substring 题目描述和难度 题目描述: 给定一个字符串 s,找到 s 中最长的回文子串.你可以假设?s 的最大长度为1000. 示例 1: 输入: "babad"输出: "bab"注意: "aba"也是一个有效答案. 示例 2: 输入: "cbbd"输出: "bb" 题目难度:中等. 英文网址:5. Longest Palindromic Substri

Longest Palindromic Substring leetcode java

题目: Given a string S, find the longest palindromic substring in S. You may assume that the maximum length of S is 1000, and there exists one unique longest palindromic substring. 题解: 第一种方法就是挨个检查,维护全局最长,时间复杂度为O(n3),会TLE. 代码如下: 1 public String longestP