3. What is the output of the following C++ code snippet that calculates minimum cuts for
s = "aab"?
std::string s = "aab";
int n = s.size();
std::vector isPalindrome(n, std::vector<bool>(n, false));
for (int i = 0; i < n; i++) {
isPalindrome[i][i] = true;
}
for (int length = 2; length <= n; length++) {
for (int start = 0; start <= n - length; start++) {
int end = start + length - 1;
if (s[start] == s[end]) {
if (length == 2) isPalindrome[start][end] = true;
else isPalindrome[start][end] = isPalindrome[start + 1][end - 1];
}
}
}
std::vector<int> cuts(n, 0);
for (int i = 0; i < n; i++) {
int minCut = i;
for (int j = 0; j <= i; j++) {
if (isPalindrome[j][i]) {
minCut = j == 0 ? 0 : std::min(minCut, cuts[j - 1] + 1);
}
}
cuts[i] = minCut;
}
std::cout << cuts[n - 1] << std::endl;