LeetCode:3298. 统计重新排列后包含另一个字符串的子字符串数目 II(滑动窗口 Java)

目录

[3298. 统计重新排列后包含另一个字符串的子字符串数目 II](#3298. 统计重新排列后包含另一个字符串的子字符串数目 II)

题目描述:

实现代码与解析:

滑动窗口

原理思路:


3298. 统计重新排列后包含另一个字符串的子字符串数目 II

题目描述:

给你两个字符串 word1word2

如果一个字符串 x 重新排列后,word2 是重排字符串的

前缀 ,那么我们称字符串 x合法的

请你返回 word1合法 子字符串的数目。

注意 ,这个问题中的内存限制比其他题目要 ,所以你 必须 实现一个线性复杂度的解法。

示例 1:

**输入:**word1 = "bcca", word2 = "abc"

**输出:**1

解释:

唯一合法的子字符串是 "bcca" ,可以重新排列得到 "abcc""abc" 是它的前缀。

示例 2:

**输入:**word1 = "abcabc", word2 = "abc"

**输出:**10

解释:

除了长度为 1 和 2 的所有子字符串都是合法的。

示例 3:

**输入:**word1 = "abcabc", word2 = "aaabc"

**输出:**0

解释:

  • 1 <= word1.length <= 106
  • 1 <= word2.length <= 104
  • word1word2 都只包含小写英文字母。

实现代码与解析:

滑动窗口

java 复制代码
class Solution {
    public long validSubstringCount(String word1, String word2) {
 
        if (word1.length() < word2.length()) {
            return 0;
        }
 
        int[] hash = new int[26];
        // 种类
        int cnt = 0;
        for (char c : word2.toCharArray()) {
            if (hash[c - 'a']++ == 0) cnt++;
        }
 
        int[] cur = new int[26];
 
        long res = 0;
        for (int l = 0, r = 0; r < word1.length(); r++) {
 
            if (++cur[word1.charAt(r) - 'a'] == hash[word1.charAt(r) - 'a']) {
                cnt--;
            }
            while (cnt == 0) {
                if (cur[word1.charAt(l) - 'a'] == hash[word1.charAt(l) - 'a']) {
                    cnt++;
                }
                cur[word1.charAt(l) - 'a']--;
                l++;
            }
            res += l;
 
        }
        return res;
    }
}

原理思路:

与昨日同。LeetCode:3297. 统计重新排列后包含另一个字符串的子字符串数目 I(滑动窗口 Java)-CSDN博客

相关推荐
胡利光几秒前
Harness Engineering 02|Repo Harness:让仓库对 Agent 可读
java·junit·单元测试
qq_349317482 分钟前
CSS如何实现Bootstrap进度条自定义动画_利用keyframe关键帧
jvm·数据库·python
wltx16884 分钟前
海外版GEO优化适合耳机出口吗?
人工智能·python
vonlycn9 分钟前
PaddleDetection转ONNX 填坑
python·onnx·paddledetection
2401_8714928510 分钟前
Python机器学习怎么防止数据泄漏_确保Scaler在Pipeline内拟合
jvm·数据库·python
2301_8180084417 分钟前
MySQL怎样在触发器中引用新旧数据行_NEW与OLD关键字详解
jvm·数据库·python
langsiming21 分钟前
【无标题】
java·开发语言·数据库
weisian15127 分钟前
Java并发编程--45-分布式一致性协议入门:Raft、Paxos与ZAB的核心思想
java·分布式·raft·paxos·zab
木井巳28 分钟前
【递归算法】解数独
java·算法·leetcode·决策树·深度优先·剪枝
t***54434 分钟前
如何在 Dev-C++ 中切换编译器
java·开发语言·c++