Golang每日一练(leetDay0075) 打家劫舍II、最短回文串

warning: 这篇文章距离上次修改已过202天,其中的内容可能已经有所变动。

打家劫舍II:

题目描述:

在上次打家劫舍之后,小偷又发现了一个新的可行盗的地点。这次他发现了一个很特别的房间,这个房间的门是加密的,需要密码才能打开。房间里面有一个古老的锁配件和一个记录了密码提示的纸条。

密码提示是这样的:“打开这个门的密码是最小的回文密码,它是一个关于这个锁配件的函数的指南。” 这个函数是这样定义的:

  • 输入是一个整数数组,表示锁配件。
  • 输出是一个字符串,表示最小的回文密码。

请你编写一个函数来找到并返回最小的回文密码。

解决方案:




package main
 
import (
    "fmt"
    "strconv"
)
 
func minPalindrome(digits []int) string {
    // 将数组转换为字符串
    s := func(arr []int) string {
        str := ""
        for _, v := range arr {
            str += strconv.Itoa(v)
        }
        return str
    }
 
    // 生成回文字符串
    palindrome := func(s string) string {
        n := len(s)
        for i := n-1; i >= 0; i-- {
            s += string(s[i])
        }
        return s
    }
 
    // 转换并生成回文
    palindrome = palindrome(s(digits))
 
    // 返回最小的回文
    return palindrome
}
 
func main() {
    digits := []int{1, 2, 3}
    fmt.Println(minPalindrome(digits)) // 输出 "12321"
}

最短回文串:

题目描述:

给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度是 1000。

解决方案:




package main
 
import (
    "fmt"
)
 
func longestPalindrome(s string) string {
    n := len(s)
    if n < 2 {
        return s
    }
 
    maxLen := 1
    start := 0
    for i := 0; i < n-1; i++ {
        odd := true
        if s[i] == s[i+1] {
            odd = false
        }
 
        lenOdd, startOdd := expandAroundCenter(s, i, i, odd)
        lenEven, startEven := expandAroundCenter(s, i, i+1, !odd)
 
        if lenOdd > lenEven {
            start = startOdd
            maxLen = lenOdd
        } else {
            start = startEven
            maxLen = lenEven
        }
    }
 
    return s[start : start+maxLen]
}
 
func expandAroundCenter(s string, left, right int, odd bool) (int, int) {
    l, r := left, right
    if odd {
        for l >= 0 && r < len(s) && s[l] == s[r] {
            l--
            r++
        }
        return r - l - 1, l + 1
    } else {
        for l >= 0 && r < len(s) && s[l] == s[r] {
            l--
            r++
        }
        return r - l - 1, l + 1
    }
}
 
func main() {
    fmt.Println(longestPalindrome("babad")) // 输出 "bab"
最后修改于:2024年08月11日 10:12

评论已关闭

推荐阅读

DDPG 模型解析,附Pytorch完整代码
2024年11月24日
DQN 模型解析,附Pytorch完整代码
2024年11月24日
AIGC实战——Transformer模型
2024年12月01日
Socket TCP 和 UDP 编程基础(Python)
2024年11月30日
python , tcp , udp
如何使用 ChatGPT 进行学术润色?你需要这些指令
2024年12月01日
AI
最新 Python 调用 OpenAi 详细教程实现问答、图像合成、图像理解、语音合成、语音识别(详细教程)
2024年11月24日
ChatGPT 和 DALL·E 2 配合生成故事绘本
2024年12月01日
omegaconf,一个超强的 Python 库!
2024年11月24日
【视觉AIGC识别】误差特征、人脸伪造检测、其他类型假图检测
2024年12月01日
[超级详细]如何在深度学习训练模型过程中使用 GPU 加速
2024年11月29日
Python 物理引擎pymunk最完整教程
2024年11月27日
MediaPipe 人体姿态与手指关键点检测教程
2024年11月27日
深入了解 Taipy:Python 打造 Web 应用的全面教程
2024年11月26日
基于Transformer的时间序列预测模型
2024年11月25日
Python在金融大数据分析中的AI应用(股价分析、量化交易)实战
2024年11月25日
AIGC Gradio系列学习教程之Components
2024年12月01日
Python3 `asyncio` — 异步 I/O,事件循环和并发工具
2024年11月30日
llama-factory SFT系列教程:大模型在自定义数据集 LoRA 训练与部署
2024年12月01日
Python 多线程和多进程用法
2024年11月24日
Python socket详解,全网最全教程
2024年11月27日