回文字符串的切割

palindrome-partitioning

http://www.nowcoder.com/questionTerminal/f983806a2ecb4106a17a365a642a9632

引用华科平凡大佬的原话,很精辟:

如要输出所有的解,往往深度优先搜索;
如要求出解的个数或最优解,往往动态规划

本题要求输出字符串的所有回文字串组合,因此用深度优先搜索(代码思路同样借鉴了大佬,判断回文的部分简直妙极了):

//
// Created by jt on 2020/8/23.
//
#include <vector>
#include <string>

using namespace std;

class Solution {
public:
    /**
     *
     * @param s string字符串
     * @return string字符串vector<vector<>>
     */
    vector<vector<string> > partition(string s) {
        // write code here
        vector<vector<string>> res;
        vector<string> vec;
        dfs(res, vec, s);
        return res;
    }

    void dfs(vector<vector<string>> &res, vector<string> &vec, string s) {
        if (s.size() < 1) { res.push_back(vec); return; }
        for (int i = 1; i <= s.size(); ++i) {   // ⚠️注意:i的含义是数组大小,因此这里是小于等于
            string sub = s.substr(0, i);
            if (isPalindrome(sub)) {
                vec.push_back(sub);
                dfs(res, vec, s.substr(i));
                vec.pop_back();
            }
        }
    }

    bool isPalindrome(string s) {
        return s == string(s.rbegin(), s.rend());
    }
};
刷遍天下无敌手 文章被收录于专栏

秋招刷题历程

全部评论

相关推荐

02-12 00:59
已编辑
哈尔滨工业大学 产品经理
华为 软件开发岗 20.6*16薪 本科
点赞 评论 收藏
分享
点赞 评论 收藏
分享
菜鸡29号:根据已有信息能初步得出以下几点: 1、硕士排了大本和大专 2、要求会多语言要么是招人很挑剔要么就是干的活杂 3、给出校招薪资范围过于巨大,说明里面的薪资制度(包括涨薪)可能有大坑
点赞 评论 收藏
分享
评论
4
1
分享

创作者周榜

更多
牛客网
牛客企业服务