《leetCode》:Longest Palindromic Substring
来源:互联网 发布:原生js dialog 编辑:程序博客网 时间:2024/06/05 02:05
题目
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.
思路一:暴力搜索法
暴力搜索法:利用两层for循环来判断所有的字符串,找出长度最大的那个是回文的字符子串。
实现代码如下:
public String longestPalindrome(String s) { if(s==null||s.length()<2){ return s; } int len =s.length(); String res = new String(); for(int i=0;i<len;i++){ char ch = s.charAt(i); for(int j=i+1;j<len;j++){ char ch2 = s.charAt(j); if(ch==ch2){ String str = s.substring(i, j+1);// if(isPalindrome(str)){ if(str.length()>res.length()){ res = str; } } } } } return res; } //判断一个字符串是否是palindrome private boolean isPalindrome(String str) { if(str==null||str.length()<1){ return false; } int begin = 0; int end = str.length()-1; while(begin<end){ if(str.charAt(begin)!=str.charAt(end)){ return false; } begin++; end--; } return true; }
显然,报超时。
对上面的代码进行改进,内层循环从后面开始遍历,只要找到一个回文,就可以跳出内层循环(后面的即使还存在回文,则肯定比这个长度要短)。
代码如下:
public String longestPalindrome(String s) { if(s==null||s.length()<2){ return s; } int len =s.length(); String res = new String(); for(int i=0;i<len;i++){ char ch = s.charAt(i); //根据此时的res来限制j的范围 for(int j=len-1;j>=i+res.length();j--){ char ch2 = s.charAt(j); if(ch==ch2){ String str = s.substring(i, j+1);// if(isPalindrome(str)){ //如果此时str为回文,则长度一定大于此时的res,因此不需要判断就可以进行更新 res = str; break; } } } } return res; } //判断一个字符串是否是palindrome private boolean isPalindrome(String str) { if(str==null||str.length()<1){ return false; } int begin = 0; int end = str.length()-1; while(begin<end){ if(str.charAt(begin)!=str.charAt(end)){ return false; } begin++; end--; } return true; }
很可惜,并没有如我们所愿AC,还是报超时。
思路二:
思路来至于:https://discuss.leetcode.com/topic/23498/very-simple-clean-java-solution
代码如下:
public class LongestPalindrome3 { int lowIndex = -1; int maxLen = -1; public String longestPalindrome(String s) { if(s==null||s.length()<2){ return s; } int len =s.length(); for(int i=0;i<len-1;i++){ //找出以i为中心的最大回文字符串 extendsPalindrome(s,i,i);//assume odd number extendsPalindrome(s,i,i+1);//assume even number } return s.substring(lowIndex, lowIndex+maxLen); } private void extendsPalindrome(String s, int i, int j) { if(s==null||i>j){ return ; } while(i>=0&&i<=j&&j<s.length()&&s.charAt(i)==s.charAt(j)){ i--; j++; } int len = (j-1)-(i+1)+1; if(maxLen<len){ lowIndex = i+1; maxLen = len; } } public static void main(String[] args){ String str = "111"; String res = new LongestPalindrome3().longestPalindrome(str); System.out.println(res); }}
1 0
- LeetCode: Longest Palindromic Substring
- LeetCode Longest Palindromic Substring
- LeetCode: Longest Palindromic Substring
- [Leetcode] Longest Palindromic Substring
- [LeetCode] Longest Palindromic Substring
- Leetcode : Longest Palindromic Substring
- [LeetCode]Longest Palindromic Substring
- leetcode Longest Palindromic Substring
- LeetCode-Longest Palindromic Substring
- [LeetCode] Longest Palindromic Substring
- Longest Palindromic Substring leetcode
- LeetCode Longest Palindromic Substring
- LeetCode - Longest Palindromic Substring
- LeetCode -- Longest Palindromic Substring
- LeetCode | Longest Palindromic Substring
- LeetCode: Longest Palindromic Substring
- [LeetCode]Longest Palindromic Substring
- leetcode Longest Palindromic Substring
- js实现键盘数字输入
- STM32 107 USB调试心得
- 天线设计(下)
- 微软笔试题 《Give My Text Back》
- 团体程序设计天梯赛-练习集 -- L3-010. 是否完全二叉搜索树
- 《leetCode》:Longest Palindromic Substring
- kali(ubuntu)linux Oracle jdk 8安装
- 红白机光线枪原理
- Spark入门-什么是Spark
- 浅谈MySql的存储引擎(表类型)
- 《JavaScript高级程序设计》——原型对象、原型链
- AndroidManifest.xml作用
- 一个Arial.ttf 找不到的异常的处理
- 不使用任何中间变量如何将a、b的值进行交换