LeetCode 131-分割回文串

news/2024/7/20 21:43:21 标签: leetcode, 深度优先, 算法

在这里插入图片描述
思路:搜索分割点,每次判断当前分割点喝上一个分割点之间的数据是否为回文串,如果是,就继续搜索下一个。
(来实验室工作的第二天,加油!)

class Solution {
    String str;
    int len;
    LinkedList<LinkedList<Integer>> list = new LinkedList<>();

    public boolean check(String s){
        // 判断s是否是回文字符串
        if(s.length()==0 || s.length()==1){
            return true;
        }
        return s.charAt(0)==s.charAt(s.length()-1) && check(s.substring(1,s.length()-1));
    }
    
    public void dfs(int splitIndex, LinkedList<Integer> tmp){
        if(splitIndex==len+1){
            list.add(new LinkedList<>(tmp));
            return;
        }

        for(int i=splitIndex; i<len+1;i++){
            int lastSplitIndex = 0;
            if(tmp.size() != 0){
                lastSplitIndex = tmp.get(tmp.size()-1);
            }
            String subStr = str.substring(lastSplitIndex, i);
            if(check(subStr)){
                tmp.add(i);
                dfs(i+1, tmp);
                tmp.removeLast();
            }
        }

        return;
    }

    public List<List<String>> partition(String s) {
        // 遍历切割点即可
        this.str = s;
        this.len = str.length();

        LinkedList<Integer> tmp = new LinkedList<>();
        dfs(1, tmp);    //遍历切割点

        // 将分割点转为字符串
        List<List<String>> res = new LinkedList<>();
        for(LinkedList<Integer> item: list){
            List<String> res_item = new LinkedList<>();
            int lastSplitIndex = 0;
            for(int currentSplitIndex : item){
                String subStr = str.substring(lastSplitIndex, currentSplitIndex);
                res_item.add(subStr);
                lastSplitIndex = currentSplitIndex;
            }
            res.add(res_item);
        }

        return res;
    }
}

http://www.niftyadmin.cn/n/1437985.html

相关文章

表格闪退怎么解决_excel2010表格打开闪退怎么回事

打开excel的时候闪退了是什么情况&#xff0c;很多时候都以为是中毒了&#xff0c;但其实只是模板出现了问题而已。下面让学习啦小编为你带来excel2010表格打开闪退的解决方法。excel2010打开闪退解决方法如下&#xff1a;1、打开我的电脑&#xff0c;再依次点击【工具】----【…

力扣152-乘积最大子数组

本题的难点在于&#xff1a;存在部分负数的情况&#xff0c;我们最开始想到的就是维护一个局部最大值imax&#xff0c;然后将Imax和当前值想乘&#xff0c;同时比较&#xff0c;谁大取谁&#xff0c;但是这里面存在负数&#xff0c;所以就需要维护一个最小值&#xff0c;因为一…

力扣1673 找出最具竞争力的子序列

解题思路&#xff1a;本题根据题意&#xff0c;寻找特性&#xff0c;首先是一个子序列&#xff0c;而且是固定长度的&#xff0c;而且有一个条件是&#xff0c;前几个数字在整个数组中越小越好&#xff0c;所以可以想到单调栈&#xff0c;单调栈保证栈中的数据都是单调递增的&a…

mysql内存表_mysql 内存表基础知识

本节内容&#xff1a;mysql 内存表在mysql数据库中创建表时用engineheap可创建(mysql5.5中已经不支持type&#xff0c;以后都用engine&#xff0c;形成习惯)。mysql内存表的特性&#xff1a;1、内存表的表定义是存放在磁盘上的&#xff0c;扩展名为.frm&#xff0c;所以重启不会…

力扣189-轮转数组的普通解法+技巧解法

普通解法有很多种&#xff0c;这里着重介绍技巧解法&#xff0c;题目的的目的是为了把数组最后k%len个元素放到前面去&#xff0c;所以我们可以先总体上翻转数组&#xff0c;这样&#xff0c;最后k个元素就放到了最前面k个位置&#xff0c;只不过顺序相反而已&#xff0c;所以我…

mysql的varchar_【Mysql】varchar类型

1.varchar类型(1)varchar (N)&#xff1a;中的N指的是字符的长度&#xff0c;即&#xff1a;该字段最多能存储多少个字符(characters)&#xff0c;不是字节数。不管是一个中英文字符或者数字、或者一个汉字&#xff0c;都当做一个字符。【 a,我&#xff0c;1 都是一个字符&…

leetcode33-搜索旋转排序数组-技巧二分

这道题的思想就是二分&#xff0c;但是因为不是传统的有序数组&#xff0c;但是也是可以进行二分的。因为对于这一段序列&#xff0c;他其实也是两段有序的序列合并的&#xff0c;所以如果每次选取一个mid之后&#xff0c;总会且分出一段是有序的&#xff0c;而另一段是无序的或…

mysql drop column_MySQL DROP COLUMN

MySQL DROP COLUMN简介&#xff1a;在本教程中&#xff0c;我们将向您展示如何使用MySQL DROP COLUMN语句从表中删除列。MySQL DROP COLUMN语句简介在某些情况下&#xff0c;您希望从表中删除一个或多个列。在这种情况下&#xff0c;您使用ALTER TABLE DROP COLUMN语句&#xf…