Day3回文串中心扩散

    技术2022-07-11  81

    leetcode 算法 5. 最长回文子串

    class Solution { public String longestPalindrome(String s) { if(null == s || s.length() == 0){ return ""; } int size = s.length(); int start = 0; int end = 0; for(int i=0;i < size;i++){ //以当前为中心 int odd = check(s,i,i); //回文串偶数对称 int even = check(s,i,i+1); int len = Math.max(odd,even); if(len > end - start + 1){ start = i - (len - 1)/ 2; end = i + len / 2; } } return s.substring(start,end+1); } public int check(String s,int begin,int end){ // begin、end 字符相等,分别向两边扩散 while(begin >= 0 && end < s.length() && s.charAt(begin) == s.charAt(end)){ begin --; end ++; } //回文串长度计算 此时 end、begin 为不相等时的下标 return end - begin - 1; } }

    思路:

    1、回文串的特性是对称 (奇数对称、偶数对称两种),对称的特性 => 中心扩散出回文串

    2、遍历字符串每个字符,分别以字符位置为起点 做 奇数回文串、偶数回文串的扩散,返回最大长度

    Processed: 0.014, SQL: 9