类似最长回文子串,稍微变形一下即可
定义 dp[j][i] 为字符串 j到i 的匹配结果
class Solution {
public:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param s string字符串
* @return bool布尔型
*/
bool isValidPairing(string s) {
int n = s.size();
vector<vector<bool>> dp(n, vector<bool>(n, false));
for (int i = 1; i < n; i++) {
for (int j = 0; j < i; j++) {
// 当这一片段长度为奇数时,匹配不可能成功
if ((i - j + 1) % 2 != 0) {
dp[j][i] = false;
continue;
}
// 当片段长度为2时单独判断
// 当片段长度大于2时,外层的匹配结果还要兼顾内层的结果
if (i - j == 1 && ((s[i] == 'B' && s[j] == 'A') ||
(s[i] == 'D' && s[j] == 'C'))) {
dp[j][i] = true;
} else {
if ((s[i] == 'B' && s[j] == 'A') || (s[i] == 'D' && s[j] == 'C')) {
dp[j][i] = dp[j + 1][i - 1];
}
}
}
}
return dp[0][n - 1];
}
};
时间复杂度:O(n^2),双重循环遍历字符串s
空间复杂度:O(n^2),存储二维数组dp

京公网安备 11010502036488号