zoukankan      html  css  js  c++  java
  • 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)

  • 相关阅读:
    PAT A1108 Finding Average [字符串处理]
    PAT A1013 Battle Over Cities [图的遍历]
    关于斐波那契数列的算法
    关于浏览器的事件队列
    类型与进制转换
    【待整理】python 关键字
    闭包和函数的自运行
    cookie-cart购物车
    有意思的效果——左右摇摆
    工厂模式
  • 原文地址:https://www.cnblogs.com/waitmoon/p/14401086.html
Copyright © 2011-2022 走看看