• 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 }
  • 相关阅读:
    一个日期Js文件。 2013年10月12日 星期六 癸巳年九月初八
    【Cocosd2d实例教程二】地图编辑器Tiled的安装使用
    结构体快排qsort()
    Crypto API加密通信流程
    LA 4255 Guess
    hdu1005 Number Sequence(数论)
    c++异常 连续抛出异常
    IMP导入数据 报错 IMP-00058 ORA-01691 IMP-00028
    Groovy/Spock 测试导论
    Groovy 与 DSL
  • 原文地址:https://www.cnblogs.com/luckygxf/p/4177197.html
Copyright © 2020-2023  润新知