当前位置: 首页 > news >正文

【力扣hot100题】(060)分割回文串

每次需要判断回文串,这点比之前几题回溯题目复杂一些。

还有我怎么又多写了循环……

class Solution {
public:
    vector<vector<string>> result;
    string s;
    bool palindromic(string s){
        for(int i=0;i<s.size()/2;i++) if(s[i]!=s[s.size()-1-i]) return 0;
        return 1;
    }
    void backtracking(int i,vector<string> &v){
        if(i==s.size()) result.push_back(v);
        for(int j=i;j<s.size();j++){
            if(palindromic(s.substr(i,j-i+1))){
                v.push_back(s.substr(i,j-i+1));
                backtracking(j+1,v);
                v.pop_back();
            }
        }
    }
    vector<vector<string>> partition(string s) {
        this->s=s;
        vector<string> v;
        backtracking(0,v);
        return result;
    }
};

看了答案发现纯递归的思路还是有些先入为主了,答案用了更好更适合的方法:动态规划,思路是先找出s中所有回文串字符串,再递归,少绕了不少弯路,很多地方都不用重复判断了,并且先用动态规划找出所有回文字符串的思路也很棒。

动态规划找回文字符串的方法是,先将判断回文串的二维数组全设为true,接着循环遍历整个数组,若两指针对应元素不同则为false。

class Solution {
public:
    vector<vector<string>> result;
    string s;
    bool dp[17][17];
    vector<string> v;
    void backtracking(int i){
        if(i==s.size()) result.push_back(v);
        else for(int j=i;j<s.size();j++){
            if(dp[i][j]){
                v.push_back(s.substr(i,j-i+1));
                backtracking(j+1);
                v.pop_back();
            }
        }
    }
    vector<vector<string>> partition(string s) {
        this->s=s;
        memset(dp,1,sizeof(dp));
        for(int i=1;i<s.size();i++){
            for(int j=0;j<i;j++){
                dp[j][i]=(s[i]==s[j])&&dp[j+1][i-1];
            }
        }
        backtracking(0);
        return result;
    }
};

相关文章:

  • PyTorch 深度学习 || 7. Unet | Ch7.1 Unet 框架
  • 【学习笔记17】Windows环境下安装RabbitMQ
  • 云服务器数据安全实践:基于 Rsync + 宝塔计划任务构建全站自动备份系统
  • Nginx 常见面试题
  • MySQL——DQL的单表查询
  • Kafka 的选举机制
  • Python高级爬虫之JS逆向+安卓逆向1.1节-搭建Python开发环境
  • Leetcode 311 Sparse Matrix Multiplication 稀疏矩阵相乘
  • [特殊字符] LeetCode 1123. 最深叶节点的最近公共祖先 | DFS后序遍历题解
  • C# System.Text.Json 中 JsonConverter 使用详解
  • 智能指针【C++】
  • Android Compose入门和基本使用
  • 基于SSM的购物商城系统
  • Linux的: /proc/sys/net/ipv6/conf/ 笔记250405
  • 嵌入式学习笔记——大小端及跳转到绝对地址
  • labelme json 标签转yolo txt【记录】
  • 在Spring Boot中实现图片上传和修改
  • STM32看门狗原理与应用详解:独立看门狗 vs 窗口看门狗(上) | 零基础入门STM32第九十四步
  • 设计模式:为什么使用模板设计模式(不相同的步骤进行抽取,使用不同的子类实现)减少重复代码,让代码更好维护。
  • C++语言的网络编程
  • 搜索引擎推广试题/seo外包一共多少钱
  • 如何自己做网站赚钱/营销培训方案
  • 如何用zblog做棋牌网站/个人推广app的妙招
  • 成都个人网站制作/二次感染即将大爆发
  • 济南软件网站建设/广州网站优化步骤
  • 网站群系统/seo站外推广有哪些