zoukankan      html  css  js  c++  java
  • Longest Palindromic Substring

    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.

    思路:

    最开始想把所有子串都穷举出来,感觉不太靠谱。后面在纸上画了一下,想到一种方法

    遍历整个字符串i

    1.如果s.charAt(i) == s.charAt(i + 1),以i和i+1为中心向两边扩展,如果是回文且长度超过了已经求得最长回文result,更新result

    2.如果s.charAt(i - 1) == s.charAt(i + 1),以i - 1和i + 1为中心向两边扩展,如果是回文且长度超过了已经求得的回文result,更新result

    遍历结束返回result

     1 public class Solution {
     2     public String longestPalindrome(String s) {
     3         if(0 == s.length() || 1 == s.length())
     4             return s;
     5         else{
     6             String result = "";
     7             
     8             for(int i = 0; i < s.length(); i++){
     9                 if(i + 1 < s.length() && s.charAt(i) == s.charAt(i + 1)){                        //以i和i + 1为中心
    10                     int j = i + 1;
    11                     int k = i;
    12 //                    i = i;
    13                     while(k >= 0 && j < s.length()){                    //向中心两边扩展
    14                         if(s.charAt(k) == s.charAt(j)){        
    15                             if((j - k + 1) > result.length())        //只有更大才能更新
    16                                 result = s.substring(k, j + 1);        //开始索引包括,结束索引不包括  更新最长回文
    17                             k--;
    18                             j++;
    19                             continue;
    20                         }
    21                         break;                                            //两边不满足直接退出
    22                     }
    23                 }//if
    24                 if(i - 1 >= 0 && i + 1 < s.length() && s.charAt(i - 1) == s.charAt(i + 1)){        //以i为中心
    25                     int j = i + 1;
    26                     int k = i - 1;
    27 //                    i = i - 1;                                            //向中心两边扩展
    28                     while(k >= 0 && j < s.length()){
    29                         if(s.charAt(k) == s.charAt(j)){
    30                             if((j - k + 1) > result.length())
    31                                 result = s.substring(k, j + 1);
    32                             k--;
    33                             j++;
    34                             continue;
    35                         }//while
    36                         break;
    37                     }
    38                 }
    39             }
    40             
    41             return result;
    42         }
    43     }
    44 }
  • 相关阅读:
    day5 元组、列表、字典和集合
    day4 字符串类型和列表类型的详细caozu
    day3 数据类型
    预习
    python基础
    计算机基础——老年人上网冲浪手册
    pycharm操作指北
    day1 计算机基础知识
    Securing a Laravel API in 20 minutes with JWTs
    Testing Api using PHPUnit Laravel
  • 原文地址:https://www.cnblogs.com/luckygxf/p/4177197.html
Copyright © 2011-2022 走看看