当前位置: 首页 > article >正文

C++ | Leetcode C++题解之第459题重复的子字符串

题目:

题解:

class Solution {
public:
    bool kmp(const string& query, const string& pattern) {
        int n = query.size();
        int m = pattern.size();
        vector<int> fail(m, -1);
        for (int i = 1; i < m; ++i) {
            int j = fail[i - 1];
            while (j != -1 && pattern[j + 1] != pattern[i]) {
                j = fail[j];
            }
            if (pattern[j + 1] == pattern[i]) {
                fail[i] = j + 1;
            }
        }
        int match = -1;
        for (int i = 1; i < n - 1; ++i) {
            while (match != -1 && pattern[match + 1] != query[i]) {
                match = fail[match];
            }
            if (pattern[match + 1] == query[i]) {
                ++match;
                if (match == m - 1) {
                    return true;
                }
            }
        }
        return false;
    }

    bool repeatedSubstringPattern(string s) {
        return kmp(s + s, s);
    }
};

http://www.kler.cn/news/336001.html

相关文章:

  • TI DSP TMS320F280025 Note15:串口SCI的使用
  • 舵机驱动详解(模拟/数字 STM32)
  • 关于vscode中settings.json中的设置
  • QT使用qss控制样式实现动态换肤
  • 安装最新 MySQL 8.0 数据库(教学用)
  • Spring Boot实现新闻个性化推荐
  • 每日一题——第一百一十一题
  • Vue.js 组件开发详解
  • [C#]winform部署官方yolov11-obb旋转框检测的onnx模型
  • Redis操作常用API
  • 【机器学习】知识总结1(人工智能、机器学习、深度学习、贝叶斯、回归分析)
  • windows环境下使用socket进行tcp通信
  • .NET NoSQL 嵌入式数据库 LiteDB 使用教程
  • Unity3D播放GIF图片 插件播放
  • springboot工程中使用tcp协议
  • LeetCode 209 Minimum Size Subarray Sum 题目解析和python代码
  • 【ADC】噪声(1)噪声分类
  • 医院管理自动化:Spring Boot技术实践
  • C语言复习概要(四)
  • 视觉定位Revisit Anything