zoukankan      html  css  js  c++  java
  • leetcode刷题笔记 214题 最短回文串

    leetcode刷题笔记 214题 最短回文串

    源地址:214. 最短回文串

    问题描述:

    给定一个字符串 s,你可以通过在字符串前面添加字符将其转换为回文串。找到并返回可以用这种方式转换的最短回文串。

    示例 1:

    输入: "aacecaaa"
    输出: "aaacecaaa"
    示例 2:

    输入: "abcd"
    输出: "dcbabcd"

    //主要算法使用马拉车算法,相关知识详见第五题
    //通过马拉车算法获取中心位置及最长回文子串
    //由于回文串的构成是在左侧进行补充,故获取中心位置后,将其后侧部分复制颠倒相连即可
    object Solution {
        def shortestPalindrome(s1: String): String = {
            var length = 0
            var pos = 0
            var mx = 0
            var end = 0
            
            //manacher prepare
            if (s1.length == 0 || s1.length == 1) return s1
            var sS = "^#"
            s1.foreach(x  => sS += x + "#")
            sS += "$"
            val arr = Array.fill(sS.length)(0)
            println("sS: " + sS)
            
            for (i <- 1 to sS.length-2) {
                if (i < mx) arr(i) = Math.min(arr(2 * pos - i), mx - i)
                else arr(i) = 1
                while (sS(i + arr(i)) == sS(i - arr(i))) arr(i) += 1
                if (arr(i) + i > mx){
                    mx = arr(i) + i
                    pos = i
                }
                if (arr(i) == i) end = i 
            }
            val res = (sS.substring(end+1, sS.length-2).reverse + sS.substring(end, sS.length-2)).split('#').mkString
            return res
        }
    }
    
  • 相关阅读:
    第32章 数据库的备份和恢复
    Perl 打印关键字上下行
    mysql select * into OUTFILE 不会锁表
    独享表空间 ibdata1
    sql 使用单引号
    Oracle 维护常用SQL
    Mysql 独享表空间
    Mysql Perl unload表数据
    PLSQL 拼接SQL
    begin和declare
  • 原文地址:https://www.cnblogs.com/ganshuoos/p/13756893.html
Copyright © 2011-2022 走看看