LeetCode-热题100:131. 分割回文串

题目描述

给你一个字符串 s,请你将 s 分割成一些子串,使每个子串都是 回文串 。返回 s 所有可能的分割方案。

示例 1:

输入: s = "aab"
输出: \["a","a","b","aa","b"]

示例 2:

输入: s = "a"
输出: \["a"]

提示:

  • 1 <= s.length <= 16
  • s仅由小写英文字母组成

代码及注释

go 复制代码
func partition(s string) [][]string {
    // 初始化结果集和当前路径
    res, path := make([][]string, 0), make([]string, 0)
    
    // 定义深度优先搜索函数
    var dfs func(s string, pos int)
    dfs = func(s string, pos int) {
        // 如果已经遍历到字符串的末尾,将当前路径添加到结果集中
        if pos == len(s) {
            tmp := make([]string, len(path))
            copy(tmp, path)
            res = append(res, tmp)
            return
        }

        // 遍历字符串,查找回文子串
        for i := pos; i < len(s); i++ {
            str := s[pos : i+1]
            // 如果找到回文子串,将其添加到路径中,继续搜索
            if isPalindrome(str) {
                path = append(path, str)
                dfs(s, i+1)
                // 回溯,将当前回文子串从路径中移除
                path = path[:len(path)-1]
            }
        }
    }

    // 开始深度优先搜索
    dfs(s, 0)
    
    // 返回结果集
    return res
}

// 判断字符串是否为回文串
func isPalindrome(s string) bool {
    left, right := 0, len(s)-1
    for left < right {
        if s[left] != s[right] {
            return false
        }
        left++
        right--
    }
    return true
}
相关推荐
林浩杨_15 分钟前
SIGIR 2026|南京大学:Video-GAR:“通过生成 Query 来验证视频语义理解”的生成增强范式
论文阅读·人工智能·算法
Elsa️74644 分钟前
算法一周刷题总结
c++·算法
小小程序猴11 小时前
深圳乘路资讯AI培训怎么样?课程靠谱吗?——一套课程可信度评估模型与实证分析
人工智能·算法
云上先途1 小时前
标签化服务适合哪些人?常见适用场景一次讲清
大数据·人工智能·算法·音视频
彧azz1 小时前
DFS与BFS:图遍历的两大核心算法
数据结构·学习·算法·深度优先·广度优先
A心有千千结1 小时前
GO 使用 OpenTelemetry 进行编译时插桩,实现零码注入
数据库·golang·可观测性·观测云
Tisfy2 小时前
LeetCode 0836.矩形重叠:xy两方向分别看
数学·leetcode·题解·模拟
宣宣猪的小花园.2 小时前
【机器学习】损失函数与梯度下降:机器如何通过“犯错”不断变好
人工智能·算法·机器学习
青山木3 小时前
Hot 100 --- 最长递增子序列
java·数据结构·算法·leetcode·动态规划
土司大王3 小时前
LeetCode hot100——33.搜索旋转排序数组:Java 二分模板与 O(log n) 实现
数据结构·算法·leetcode