当前位置:   article > 正文

回溯-分割回文串_回溯 回文 go

回溯 回文 go

  1. class Solution {
  2. private:
  3. vector<vector<string>> res;
  4. vector<string> path;
  5. //利用双指针来对回文进行判断
  6. bool isPalindrome(const string& s, int start, int end) {
  7. for (int i = start, j = end; i < j; i++, j--) {
  8. if (s[i] != s[j]) {
  9. return false;
  10. }
  11. }
  12. return true;
  13. }
  14. void backTracking(string s, int startIndex) {
  15. if (startIndex >= s.size()) {
  16. res.push_back(path);
  17. return;
  18. }
  19. //判断的是[i, startIndex]这个区间是否回文
  20. for (int i = startIndex; i < s.size(); i++) {
  21. if (isPalindrome(s, startIndex, i)) {
  22. string str = s.substr(startIndex, i - startIndex + 1);
  23. path.push_back(str);
  24. backTracking(s, i + 1);
  25. path.pop_back();
  26. }
  27. }
  28. }
  29. public:
  30. vector<vector<string>> partition(string s) {
  31. backTracking(s, 0);
  32. return res;
  33. }
  34. };

 回溯的一个重要题型--切割问题

算法思想:其实和组合问题非常类似,组合问题的取数其实对应切割问题的切割,切割问题就是在某个地方切割,也就是答案中的i,切割下来的就是startIndex到i这一段,然后递归,再回溯。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Cpp五条/article/detail/676700
推荐阅读
相关标签
  

闽ICP备14008679号