rss
  • 1
0

香港今晚开奖结果查询结果近15期开奖号码—liuhecai—精准数据分析

2025.04.06 | admin | 7次围观
澳门49码开奖结果查询优势评测

回文子序列的个数可以通过动态规划来计算。以下是一个C++示例代码,用于计算给定字符串中回文子序列的个数:

C++
#include <iostream>
#include <cstring>

int countPalindromicSubsequences(const std::string& str) {
    int n = str.length();
    
    // dp[i][j]表示从i到j的子串中回文子序列的个数
    int dp[n][n];
    memset(dp, 0, sizeof(dp));

    // 每个单字符都是长度为1的回文子序列
  2025全年新澳门正版免费资料6   for (int i = 0; i < n; i++) {
        dp[i][i] = 1;
    }

    // 遍历长度为2到n的子串
    for (int len = 2; len <= n; len++) {
        for (int i = 0; i <= n - len; i++) {
            int j = i + len - 1;

            // 如果首尾字符相同,可以在原有的回文子序列基础上新增2个,再加上新的两个单字符
            if (str[i] == str[j]) {
                dp[i][j] = dp[i + 1][j - 1] + 2;
            } else {
                // 如果首尾字符不同,分别计算去掉首字符和去掉尾字符后的子串中的回文子序列个数
                dp[i][j] = dp[i + 1][j] + dp[i][j - 1] - dp[i + 1][j - 1];
            }

            // 处理重复计算的情况
            if (str[i] == str[j]) {
                int k = i + 1;
                int m = j - 1;
                while (k <= m && str[i] == str[k]) {
                    k++;
                }
                while (k <= m && str[j] == str[m]) {
                    m--;
                }
                if (k <= m) {
                    dp[i][j] += 1; // 加上重复的回文子序列个数
                }
            }
        }
    }

    return dp[0][n - 1];
}

int main() {
    std::string input;
    std::cout << "请输入字符串: ";
    std::cin >> input;

    int result = countPalindromicSubsequences(input);

    std::cout << "回文子序列的个数是: " << result << std::endl;

    return 0;
}

这段代码使用动态规划来计算给定字符串中回文子序列的个数。在 函数中, 表示从索引 到 的子串中回文子序列的个数。


标签列表