• 2021-02-13:字符串str最少添加多少个字符变成回文串?


    福哥答案2020-02-13:

    假设字符串str是“abcde12344321”,在str后添加“edcba”即可变成回文串。需要添加5个字符。

    解法:包含最后一个字符的manacher算法算出长度,然后str的总长度减去manacher长度,就是需要添加的字符个数。

    代码用golang编写,代码如下:、

    package main
    
    import "fmt"
    
    func main() {
        str := "abcde12344321"
        ret := ShortestEnd(str)
        fmt.Println(ret)
    }
    
    func ShortestEnd(s string) int {
        str := manacherString(s)
        strLen := len(str)
        pArr := make([]int, strLen)
        C := -1
        R := -1
        ret := 1
        for i := 0; i < strLen; i++ {
            if R > i {
                pArr[i] = getMin(R-i, pArr[2*C-i])
            } else {
                pArr[i] = 1
            }
            for i+pArr[i] < strLen && i-pArr[i] >= 0 {
                if str[i+pArr[i]] == str[i-pArr[i]] {
                    pArr[i]++
                } else {
                    break
                }
            }
            if i+pArr[i] > R {
                R = i + pArr[i]
                C = i
            }
    
            //修改
            if R == strLen {
                ret = getMax(ret, pArr[i])
                break
            }
        }
    
        //修改
        return strLen/2 - ret + 1
    }
    
    func manacherString(s string) string {
        ret := "#"
        sLen := len(s)
        for i := 0; i < sLen; i++ {
            ret += fmt.Sprintf("%c#", s[i])
        }
        return ret
    }
    
    func getMax(a int, b int) int {
        if a > b {
            return a
        } else {
            return b
        }
    }
    
    func getMin(a int, b int) int {
        if a < b {
            return a
        } else {
            return b
        }
    }
    

      

    执行结果如下:

    ***
    [左神java代码](https://github.com/algorithmzuo/algorithmbasic2020/blob/master/src/class28/Code02_AddShortestEnd.java)
    [评论](https://user.qzone.qq.com/3182319461/blog/1613174556)

  • 相关阅读:
    PetaLinux 生成 Zynq 操作系统
    单片机、微控制器和微处理器有什么区别
    嵌入式基础概念系列(1) —— GPIO
    学中杂记
    Spring学习笔记
    jdbc一点小笔记
    JSP学习
    Servlet学习的一些笔记
    接触Struts2的ModelDriven<>接口
    android-dialog的位置
  • 原文地址:https://www.cnblogs.com/waitmoon/p/14401086.html
Copyright © 2020-2023  润新知