前端算法-回文串分割

简介: 前端算法-回文串分割

题目

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

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

思路一

我们声明一个res变量用于存放返回结果,在声明一个isValid函数用于判断str形参字符串是否为回文字符串,然后在该函数中判断当前str形参字符串长度是否为1,如果是则直接返回true,如果不是则声明一个l变量作为起始位置,在声明一个r变量作为str形参字符串的最后末端位置,我们接下来进行循环,循环条件为l变量小于r变量,在循环中我们判断当前的str字符串l变量位置在str形参字符串中的字符和末端位置在str形参字符串中的位置是否不相等,如果是则返回false,如果不是则继续循环,并将l变量值自增1,r变量值自减1,逐渐往中间值靠拢,最后循环结束后如果没有返回false则直接返回true,接下来声明递归函数dfs,在函数中声明一个开始值和一个存储结果的数组,然后我们判断当前开始的值和s形参字符串的长度是否相等,如果相等则将arr数组使用push方法添加到res数组中,在直接return出去,如果不相等,那么我们就先声明一个temp空字符串,在使用循环对形参s字符串进行循环,初始的循环值为start变量值,在循环中我们将当前循环字串的值与temp变量字符串进行相加,在使用isValid方法判断temp变量字符串是否是回文字符串,如果是则进行下一轮递归,接下来我们调用递归,最后将res数组返回出去即可

var partition = function(s) {
    const res = []
    function isValid(str) {
        if(str.length === 1) {
        return true 
        }
        let l = 0,r = str.length-1
        while(l<r){
            if(str[l] !== str[r]) return false
            l++
            r--
        }
        return true
    }
   const dfs = (start,arr) => {
        if(start === s.length){
            res.push(arr)
            return 
        }
       let temp =''
        for(let i =start;i<s.length;i++){
            temp+=s[i]
            if(isValid(temp)){
                dfs(i+1,[...arr,temp])
            }
        }
    }
    dfs(0,[])
    return res
};


相关文章
|
1月前
|
算法 前端开发 数据可视化
数据结构与算法在前端开发中的实际应用
本文将探讨数据结构与算法在前端开发中的实际应用,重点介绍在处理大规模数据、优化性能和提升用户体验方面的具体场景和解决方案。
|
1月前
|
存储 canal 算法
[Java·算法·简单] LeetCode 125. 验证回文串 详细解读
[Java·算法·简单] LeetCode 125. 验证回文串 详细解读
23 0
|
2月前
|
机器学习/深度学习 监控 算法
yolov8+多算法多目标追踪+实例分割+目标检测+姿态估计(代码+教程)
yolov8+多算法多目标追踪+实例分割+目标检测+姿态估计(代码+教程)
129 1
|
11天前
|
算法 前端开发
前端算法 岛屿的最大面积 DFS(深度优先搜索)
前端算法 岛屿的最大面积 DFS(深度优先搜索)
11 0
|
2月前
|
算法 测试技术 C++
【动态规划】【数学】【C++算法】805 数组的均值分割
【动态规划】【数学】【C++算法】805 数组的均值分割
|
3月前
|
算法 测试技术 C#
【动态规划】【数学】【C++算法】805 数组的均值分割
【动态规划】【数学】【C++算法】805 数组的均值分割
|
3月前
|
存储 算法 JavaScript
|
3月前
|
算法 JavaScript
|
3月前
|
算法 前端开发
前端算法-路径总和
前端算法-路径总和
|
3月前
|
算法 前端开发
前端算法-平衡二叉树
前端算法-平衡二叉树