专业的JAVA编程教程与资源

网站首页 > java教程 正文

挑战刷leetcode第17天(分割回文串)

temp10 2025-03-29 22:08:22 java教程 5 ℃ 0 评论

哪吒的“分割回文串”大冒险:从“aab”到“aa,b”的奇幻旅程

大家好,我是哪吒,今天我要带大家进入一个神奇的字符串世界。你们知道吗?有时候,一个简单的字符串就像一块未经雕琢的玉石,需要我们用心去切割,才能发现它内在的美。今天我们要解决的问题就是——分割回文串

1. 什么是回文串?

首先,回文串是什么?简单来说,就是正着读和反着读都一样的字符串。比如“哪吒”不是回文串,但“哪吒他爸”也不是回文串(笑)。不过,“aab”这个字符串,我们可以把它分割成“a,a,b”或者“aa,b”,这两种分割方式都是回文串。

挑战刷leetcode第17天(分割回文串)

2. 问题描述

给你一个字符串 s,要求你把 s 分割成一些子串,每个子串都必须是回文串。最后返回所有可能的分割方案。

举个例子:

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

3. 哪吒的解题思路

哪吒我虽然有三头六臂,但面对这个问题,也得一步步来。我们可以用**深度优先搜索(DFS)**来解决这个问题。DFS 就像哪吒的风火轮,带我们遍历所有可能的分割方式。

3.1 DFS 的基本思路

  1. 递归终止条件:当我们遍历到字符串的末尾时,说明我们已经找到了一种分割方式,把它加入结果集中。
  2. 遍历所有可能的分割点:从当前的位置开始,尝试每一个可能的分割点,看看这个子串是不是回文串。
  3. 回溯:如果这个子串是回文串,我们就把它加入当前的分割方案中,然后继续递归处理剩下的字符串。处理完后,记得把这个子串从当前方案中移除,以便尝试其他可能的分割方式。

3.2 代码实现

java

public List<List> partition(String s) {
    List<List> res = new ArrayList<>();
    Deque path = new ArrayDeque<>();

    dfs(res, path, s, 0);
    return res;
}

public void dfs(List<List> res, Deque path, String s, int start) {
    if (s.length() == start) {
        res.add(new ArrayList<>(path));
        return;
    }

    for (int i = start; i < s.length(); i++) {
        if (!isHw(s, start, i)) {
            continue;
        }
        path.add(s.substring(start, i + 1));
        dfs(res, path, s, i + 1);
        path.removeLast();
    }
}

public boolean isHw(String s, int start, int position) {
    while (start < position) {
        if (s.charAt(start++) != s.charAt(position--)) {
            return false;
        }
    }
    return true;
}

3.3 代码解析

  • partition 方法:这是我们的主方法,初始化结果集和路径,然后调用 DFS 开始递归。
  • dfs 方法:这是递归的核心方法,负责遍历所有可能的分割方式。
  • isHw 方法:这是判断一个子串是否是回文串的方法,通过双指针从两端向中间遍历,判断字符是否相等。

4. 哪吒的坚持与思考

在解决这个问题的过程中,哪吒我深刻体会到了坚持的重要性。有时候,我们会遇到一些看似复杂的问题,但只要我们有耐心,一步步去分析、去尝试,最终总能找到解决的办法。

就像我们在 DFS 中,每次递归都是在尝试一种新的分割方式,虽然有时候会遇到不符合条件的子串,但我们不会轻易放弃,而是继续尝试其他的可能性。这种坚持不懈的精神,正是我们在编程和生活中都需要具备的。

5. 总结

通过这次“分割回文串”的冒险,哪吒我不仅学会了如何用 DFS 来解决字符串分割问题,还深刻体会到了坚持和耐心的重要性。希望大家在编程的道路上,也能像哪吒一样,勇敢面对每一个挑战,坚持不懈,最终收获属于自己的成功。

好了,今天的分享就到这里,下次再见!记得点赞、关注、转发哦!(笑)

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表