zoukankan      html  css  js  c++  java
  • 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 public class Solution {
     2     String longestOne = null;
     3     int lengthOfLongest = 0;
     4     public String longestPalindrome(String s) {
     5         // Start typing your Java solution below
     6         // DO NOT write main() function
     7         longestOne = null;
     8         lengthOfLongest = 0;
     9         if(s.length() == 0){
    10             return longestOne;
    11         }
    12         if(s.length() == 1){
    13             return s;
    14         }
    15         for(int i = 0; i < s.length() - 1; i ++){
    16             if(s.charAt(i) == s.charAt(i+1)){
    17                 if((i == 0 || i == s.length() - 2) && lengthOfLongest < 2){
    18                         lengthOfLongest = 2;
    19                         longestOne = s.substring(i,i+2);
    20                 }
    21                 else{getLongestPalindrome(i - 1, i + 2, s);}
    22             }
    23         }
    24         for(int i = 1; i < s.length() - 1; i ++){
    25             getLongestPalindrome(i - 1, i + 1, s);
    26         }
    27         return longestOne;
    28     }
    29     
    30     public void getLongestPalindrome(int left, int right, String s){
    31         if(left < 0 || right >= s.length()) return;
    32         int j = right;
    33         for(int i = left; i > -1 ; i --){
    34             if(j < s.length() && s.charAt(i) == s.charAt(j)){
    35                 if(j-i+1 >= lengthOfLongest){
    36                     lengthOfLongest = j-i+1;
    37                     longestOne = s.substring(i,j+1);
    38                 }
    39             }
    40             else{
    41                 return;
    42             }
    43             j ++;
    44         }
    45     }
    46 }

     第二遍:

     可以将长度为奇数的substring 和 偶数substring 归并到一起。 即使用两倍长度进行循环。 如果是点 则以为中心, 如果是中间,则以两边的点为中心。 减少很多test case。

     1 public class Solution {
     2     public String longestPalindrome(String s) {
     3         // Note: The Solution object is instantiated only once and is reused by each test case.
     4         String longestOne = null;
     5         int max = 0;
     6         int len = s.length();
     7         for(int i = 0; i <= (len - 1)* 2; i ++){
     8             int left = (i % 2 == 1 ? i / 2 : i / 2 - 1);
     9             int right = i / 2 + 1;
    10             while(left > -1 && right < len && s.charAt(left) == s.charAt(right)){
    11                 left --;
    12                 right ++;
    13             }
    14             if(right - left - 1 > max){
    15                 max = right - left - 1;
    16                 longestOne = s.substring(left + 1, right);
    17             }
    18         }
    19         return longestOne;
    20     }
    21 }

     第三遍:

     1 public class Solution {
     2     public String longestPalindrome(String s) {
     3         if(s == null || s.length() == 0) return null;
     4         int len = s.length();
     5         int max = 0;
     6         int max_left = 0, max_right = 0;
     7         for(int i = 0; i < len * 2 - 1; i ++){
     8             int left  = i / 2;
     9             int right = (i + 1) / 2;
    10             while(left > -1 && right < len && s.charAt(left) == s.charAt(right)){
    11                 left --;
    12                 right ++;
    13             }
    14             if(right - left > max){
    15                 max = right - left;
    16                 max_left = left + 1;
    17                 max_right = right;
    18             }
    19         }
    20         return s.substring(max_left,max_right);
    21     }
    22 }
  • 相关阅读:
    Java中常见的几种加密算法
    关于redis中过期的key的处理
    Redis 的内存淘汰策略
    AES加密算法原理(加密过程)
    springboot中从配置文件中读取相关参数值
    springboot中切换配置(多个配置文件--生产、开发、测试)
    mysql跨库查询数据
    SpringBoot2.0 的默认连接池----Hikari
    Druid连接池中的缓存机制
    Opus编解码练习
  • 原文地址:https://www.cnblogs.com/reynold-lei/p/3303285.html
Copyright © 2011-2022 走看看