zoukankan      html  css  js  c++  java
  • 131. Palindrome Partitioning

    问题:

    给定一个字符串,进行切分,使得每个切片都是一个回文字符串。将所有切法返回。

    Example 1:
    Input: s = "aab"
    Output: [["a","a","b"],["aa","b"]]
    
    Example 2:
    Input: s = "a"
    Output: [["a"]]
     
    Constraints:
    1 <= s.length <= 16
    s contains only lowercase English letters.
    

      

    解法:Backtracking(回溯算法)

    对于本问题,两个变量:

    • 路径:已经切好的前几位结果
    • 选择列表:对每个位置上可选择切分or不切,若满足回文字符串,则进行下一个位置的递归判断

    处理过程:

    base:递归退出条件:选择到最后一位结束,这里为当前位置pos==给出的字符串长度。

    • 将path加入res中,返回。

    做选择:从当前位置pos开始,向后找字符串tmp=s[pos~i],满足回文字符串的话,进行选择

    • 路径.add(tmp)
    • 选择列表:pos=pos+i

    撤销选择:回退到选择tmp字符串之前的状况。

    • 路径.delete(tmp)
    • 选择列表:pos=pos-i

    代码参考:

     1 class Solution {
     2 public:
     3     bool isValid(string s) {
     4         for(int i=0, j=s.size()-1; i<=j; i++,j--) {
     5             if(s[i]!=s[j]) return false;
     6         }
     7         return true;
     8     }
     9     void backtrack(vector<vector<string>>& res, vector<string>& path, int pos, string s) {
    10         if(pos == s.size()) {
    11             res.push_back(path);
    12             return;
    13         }
    14         for(int i = pos+1; i <= s.size(); i++) {
    15             string tmp = s.substr(pos, i-pos);
    16             if(isValid(tmp)) {
    17                 path.push_back(tmp);
    18                 backtrack(res, path, i, s);
    19                 path.pop_back();
    20             }
    21         }
    22         return;
    23     }
    24     vector<vector<string>> partition(string s) {
    25         vector<vector<string>> res;
    26         vector<string> path;
    27         backtrack(res, path, 0, s);
    28         return res;
    29     }
    30 };
  • 相关阅读:
    阿里云服务器购买后的配置指南
    第一阶段总结
    RDD的checkpoint机制和键值对RDD数据分区
    广播变量与累加器
    Spark的监控
    Spark和MR的区别
    hadoop离线项目处理流程
    Flume(一)
    Sparkcore高级应用3
    SparkCore高级应用2(Spark on yarn)
  • 原文地址:https://www.cnblogs.com/habibah-chang/p/14254117.html
Copyright © 2011-2022 走看看