假设我们有一个小写的字符串s,我们必须将它分成尽可能少的字符串,以使每个字符串都是回文,然后找到字符串的数量。
因此,如果输入类似于s =“ levelracecar”,则输出将为2,因为有两个回文式“ level”和“ racecar”。
让我们看下面的实现以更好地理解-
#include <bits/stdc++.h> using namespace std; class Solution { public: bool isPalindrome(string A) { int left = 0; int right = A.size() - 1; while (left < right) { if (A[left] != A[right]) { return 0; } left++; right--; } return 1; } int solve(string A) { int n = A.size(); vector<int> result(n + 1); result[n] = -1; for (int i = n - 1; i >= 0; i--) { result[i] = n - i - 1; for (int j = i; j < n; j++) { if (isPalindrome(A.substr(i, j - i + 1))) { result[i] = min(result[i], 1 + result[j + 1]); } } } return result[0] + 1; } }; int solve(string s) { return (new Solution())->solve(s); } int main(){ string s = "levelracecar"; cout << solve(s); }
"levelracecar"输出结果
2