• leetcode做题笔记131. 分割回文串


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

    回文串 是正着读和反着读都一样的字符串。

    思路一:DFS+回溯

    c语言解法

    1. bool isPalindrome(char *s,int l,int r){
    2. while(l<=r){
    3. if(s[l++]!=s[r--])return false;
    4. }
    5. return true;
    6. }
    7. void dfs(char *s, int len, char ***res, int* returnSize, int** returnColumnSizes, char buf[][len +1], int idx)
    8. {
    9. int i;
    10. if (*s == '\0') {
    11. res[*returnSize] = (char**)malloc(sizeof(char*) * len);
    12. for (i = 0; i < idx; i++) {
    13. res[*returnSize][i] = (char*)malloc(sizeof(char) * (len + 1));
    14. strcpy(res[*returnSize][i], buf[i]);
    15. }
    16. (*returnColumnSizes)[(*returnSize)++] = idx;
    17. return;
    18. }
    19. int len2 = strlen(s);
    20. for (i = 0; i < len2; i++) {
    21. if (isPalindrome(s, 0, i) == true) { /* 子串满足回文后, 继续处理 */
    22. strncpy(buf[idx], s, i + 1); /* 将子串复制到buf中, 增加结束符 */
    23. buf[idx][i + 1] = '\0';
    24. dfs(s + i + 1, len, res, returnSize, returnColumnSizes, buf, idx + 1);
    25. }
    26. }
    27. }
    28. char *** partition(char * s, int* returnSize, int** returnColumnSizes){
    29. if (strlen(s) == 0) {
    30. *returnSize = 0;
    31. return NULL;
    32. }
    33. int len = strlen(s);
    34. char ***res = (char***)malloc(sizeof(char**) * 32768);
    35. char buf[len][len + 1]; /* 临时buf */
    36. *returnSize = 0;
    37. *returnColumnSizes = (int*)malloc(sizeof(int) * 32768);
    38. dfs(s, len, res, returnSize, returnColumnSizes, buf, 0);
    39. return res;
    40. }

    分析:

    本题要求出原字符串分割后的所有回文串,可以先编写判断回文串的函数ispalindrome,之后采用深度优先搜索和回溯的方法将所有字符串的子串求出,深度优先的边界条件设置为当遍历到字符串的结束符时结束,最后返回所有回文串

    总结:

    本题考察深度优先搜索的用法,注意回溯判断当字符串为回文串时回溯

  • 相关阅读:
    PyQt5快速开发与实战 4.13 菜单栏、工具栏与状态栏 and 4.14 QPrinter
    【C++】迭代器
    MISRA 2012学习笔记(5)-Rules 8.10
    使用playright自动下载vscode已安装插件
    DevOps的未来趋势
    【EasyRL学习笔记】第六章 DQN 深度Q网络(基本概念)
    typescript
    Python np.argsort() 函数的用法
    正则表达式的修饰符
    背包理论之01背包
  • 原文地址:https://blog.csdn.net/si_mple_/article/details/132781045