【代码随想录】刷题笔记Day31

前言

  • 昨天做项目做到自闭,感觉自己调参花了好多无意义的时间,或许最后也没法换得想要的成果,和npy打完电话后就在纠结老师给不给共一和共一能不能毕业,甚至焦虑到半小时才入睡(真难得),今早和学长聊了聊天感觉整体又松弛下来了,毕业的难度没有预想的大,本质上就是缺少经验的畏难,“不知道企业刷题什么难度就去面几个呗”,“专利软著水水也能毕业的”,“大部分人的科研就是没什么指导的”,“这毕业难度很低了”,也是,焦虑解决不了任何问题,一切的根源都是能力不足,Just Do It!!!题目继续开刷!!!

131. 分割回文串 - 力扣(LeetCode)

  • 切割问题类似组合问题,把startIndex抽象成分割线,按照模板写,再取子串再判断回文
  • 【代码随想录】刷题笔记Day31_第1张图片
  • class Solution {
    private:
        vector> result;
        vector path; // 放已经回文的子串
        void backtracking (const string& s, int startIndex) {
            // 如果起始位置已经大于s的大小,说明已经找到了一组分割方案了
            if (startIndex >= s.size()) {
                result.push_back(path);
                return;
            }
            for (int i = startIndex; i < s.size(); i++) {
                if (isPalindrome(s, startIndex, i)) {   // 是回文子串
                    // 获取[startIndex,i]在s中的子串
                    string str = s.substr(startIndex, i - startIndex + 1);
                    path.push_back(str);
                } else {                                // 不是回文,跳过
                    continue;
                }
                backtracking(s, i + 1); // 寻找i+1为起始位置的子串
                path.pop_back(); // 回溯过程,弹出本次已经添加的子串
            }
        }
        bool isPalindrome(const string& s, int start, int end) {
            for (int i = start, j = end; i < j; i++, j--) {
                if (s[i] != s[j]) {
                    return false;
                }
            }
            return true;
        }
    public:
        vector> partition(string s) {
            result.clear();
            path.clear();
            backtracking(s, 0);
            return result;
        }
    };

后言

  • 这题确实是有点难,而且现在已经11点了,今天就一道,小玩一会去跑步咯~~ 

你可能感兴趣的:(代码随想录刷题笔记,笔记,leetcode,算法,数据结构,职场和发展)