【Leetcode】466. 统计重复个数

文章目录

题目

466. 统计重复个数
在这里插入图片描述

思路

题目要求找出一个最大整数 m,使得经过 n2 个字符串 s2 组成的字符串能够被经过 n1 个字符串 s1 组成的字符串完全包含的次数。使用动态规划来记录每个位置匹配的情况,并通过循环节的分析来计算最终的匹配次数。

代码

class Solution {
public:
    int getMaxRepetitions(string s1, int n1, string s2, int n2) {
        int len1 = s1.length();
        int len2 = s2.length();
        vector<vector<int>> next(len1 + 1, vector<int>(26, 0));
        vector<vector<int>> dp(len1 + 1, vector<int>(2, 0));

        for (int i = 0; i < 26; i++) {
            next[len1][i] = INT_MAX;
        }

        for (int i = len1 - 1; i >= 0; i--) {
            int idx = s1[i] - 'a';
            for (int j = 0; j < 26; j++) {
                next[i][j] = next[i + 1][j];
                if (j == idx) {
                    next[i][j] = i + 1;
                }
            }
        }

        for (int i = 0; i < len1 + 1; i++) {
            int count = 0;
            int offset = i;

            int j = 0;
            while (j < len2) {
                int idx = s2[j] - 'a';
                int pos = next[offset][idx];

                if (offset == 0 && pos == INT_MAX) {
                    return 0;
                }
                if (pos == INT_MAX) {
                    offset = 0;
                    count++;
                } else {
                    offset = pos;
                    j++;
                }
            }
            dp[i][0] = count;
            dp[i][1] = offset;
        }

        int p = 1;
        int total = 0;
        int offset = 0;
        while (p <= n1) {
            int count = dp[offset][0];
            int idx = dp[offset][1];
            if (p + count > n1) {
                break;
            }

            p = p + count;
            total++;
            offset = idx;
        }

        return total / n2;
    }
};

相关推荐

  1. 【贪心】LeetCode-406. 根据身高重建队列

    2024-01-03 11:58:01       54 阅读
  2. 字符个数统计

    2024-01-03 11:58:01       55 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-01-03 11:58:01       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-01-03 11:58:01       106 阅读
  3. 在Django里面运行非项目文件

    2024-01-03 11:58:01       87 阅读
  4. Python语言-面向对象

    2024-01-03 11:58:01       96 阅读

热门阅读

  1. 2024年 AI在供应链安全方面的应用浅析

    2024-01-03 11:58:01       51 阅读
  2. css3 变换 transition

    2024-01-03 11:58:01       53 阅读
  3. Flink的检查点算法

    2024-01-03 11:58:01       60 阅读
  4. Spring Boot中WebMvcConfig配置详解及示例

    2024-01-03 11:58:01       56 阅读
  5. 敏捷产品经理企业级实训

    2024-01-03 11:58:01       62 阅读
  6. 【docker】一文讲完docker基本概念

    2024-01-03 11:58:01       37 阅读