动态规划之回文字符串切割

mac2025-10-15  8

题目:

给定一个字符串str,返回把str全部切成回文子串的最小分割数。

举例:

str=“ABA” ,不需要切割,返回0;

str=“ACDCDCDAD”,最少需要切两次,比如"A",“CDCDC”,“DAD”,所以返回2.

#include <bits/stdc++.h> using namespace std; int D[100]; bool check(string S, int s, int e) { while (s <= e) { if (S[s] != S[e]) return false; s++; e--; } return true; } int dp(string S) { for (int i = 1; i < S.size(); ++i) { D[i] = check(S, 0, i) ? 0 : i + 1; for (int t = i; t >= 1; --t) { if (check(S, t, i)) { D[i] = min(D[i], D[t - 1] + 1); } } } return D[S.size() - 1]; } int main() { while (true) { string S; cin >> S; cout << dp(S) << endl; for (int i = 0; i < S.size(); ++i) cout << D[i] << '\t'; system("pause"); } }
最新回复(0)