
Data Structure
Networking
RDBMS
Operating System
Java
MS Excel
iOS
HTML
CSS
Android
Python
C Programming
C++
C#
MongoDB
MySQL
Javascript
PHP
- Selected Reading
- UPSC IAS Exams Notes
- Developer's Best Practices
- Questions and Answers
- Effective Resume Writing
- HR Interview Questions
- Computer Glossary
- Who is Who
Count Number of Palindromes After Minimum Splits in C++
Suppose we have a lowercase string s, we have to split it into as few strings as possible such that each string is a palindrome and then find the number of strings.
So, if the input is like s = "levelracecar", then the output will be 2, as there are two palindromes "level" and "racecar".
To solve this, we will follow these steps −
n := size of A
Define an array result of size (n + 1)
result[n] := -1
-
for initialize i := n - 1, when i >= 0, update (decrease i by 1), do −
result[i] := n - i - 1
-
for initialize j := i, when j < n, update (increase j by 1), do −
-
if substring of A from range i to j - i is palindrome, then −
result[i] := minimum of result[i] and 1 + result[j + 1]
-
return result[0] + 1
Example
Let us see the following implementation to get better understanding −
#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); }
Input
"levelracecar"
Output
2