首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >2021-06-30:给定长度为m的字符串aim,以及一个长度为n的字符串str ,问能否在str中找到一个长度为m的连续子串,

2021-06-30:给定长度为m的字符串aim,以及一个长度为n的字符串str ,问能否在str中找到一个长度为m的连续子串,

作者头像
福大大架构师每日一题
发布于 2021-08-05 08:14:23
发布于 2021-08-05 08:14:23
1K00
代码可运行
举报
运行总次数:0
代码可运行

2021-06-30:给定长度为m的字符串aim,以及一个长度为n的字符串str ,问能否在str中找到一个长度为m的连续子串, 使得这个子串刚好由aim的m个字符组成,顺序无所谓, 返回任意满足条件的一个子串的起始位置,未找到返回-1。

福大大 答案2021-06-30:

map+all+滑动窗口。

map:欠账表。

all:总欠账数。

代码用golang编写。代码如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
package main

import "fmt"

func main() {
    s1 := "moonfdd"
    s2 := "ddf"
    ret := containExactly3(s1, s2)
    fmt.Println(ret)
}

func containExactly3(s1 string, s2 string) int {
    if len(s1) < len(s2) {
        return -1
    }
    M := len(s2)
    count := make([]int, 256)
    for i := 0; i < M; i++ {
        count[s2[i]]++
    }
    all := M
    R := 0
    // 0~M-1
    for ; R < M; R++ { // 最早的M个字符,让其窗口初步形成
        if count[s1[R]] > 0 {
            count[s1[R]]--
            all--
        } else {
            count[s1[R]]--
        }
    }
    // 窗口初步形成了,并没有判断有效无效,决定下一个位置一上来判断
    // 接下来的过程,窗口右进一个,左吐一个
    for ; R < len(s1); R++ {
        if all == 0 { // R-1
            return R - M
        }
        if count[s1[R]] > 0 {
            all--
            count[s1[R]]--
        } else {
            count[s1[R]]--
        }
        if count[s1[R-M]] >= 0 {
            count[s1[R-M]]++
            all++
        } else {
            count[s1[R-M]]++
        }
    }
    if all == 0 {
        return R - M
    } else {
        return -1
    }
}

执行结果如下:

***

[左神java代码](https://github.com/algorithmzuo/coding-for-great-offer/blob/main/src/class12/Code01_ContainAllCharExactly.java)

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-06-30,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 福大大架构师每日一题 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
2021-08-30:给定两个字符串str1和str2,在str1中寻找一个
2021-08-30:给定两个字符串str1和str2,在str1中寻找一个最短子串,能包含str2的所有字符,字符顺序无所谓,str1的这个最短子串也可以包含多余的字符。返回这个最短包含子串。
福大大架构师每日一题
2021/08/30
9690
2021-08-30:给定两个字符串str1和str2,在str1中寻找一个
2021-12-18:找到字符串中所有字母异位词。 给定两个字符
给定两个字符串 s 和 p,找到 s 中所有 p 的 异位词 的子串,返回这些子串的起始索引。不考虑答案输出的顺序。
福大大架构师每日一题
2021/12/18
2120
2021-11-13:至少有 K 个重复字符的最长子串。给你一个字符串 s 和一个整数 k ,请你找出 s 中的最长子串, 要求
2021-11-13:至少有 K 个重复字符的最长子串。给你一个字符串 s 和一个整数 k ,请你找出 s 中的最长子串, 要求该子串中的每一字符出现次数都不少于 k 。返回这一子串的长度。提示:1 <= s.length <= 10的4次方,s 仅由小写英文字母组成,1 <= k <= 10的5次方。力扣395。
福大大架构师每日一题
2021/11/16
6080
2021-11-13:至少有 K 个重复字符的最长子串。给你一个字符串 s 和一个整数 k ,请你找出 s 中的最长子串, 要求
2021-08-18:扰乱字符串。使用下面描述的算法可以扰乱字符串 s 得到字符串 t :1.如果字符串的长度为 1 ,算法停止
2021-08-18:扰乱字符串。使用下面描述的算法可以扰乱字符串 s 得到字符串 t :1.如果字符串的长度为 1 ,算法停止。2.如果字符串的长度 > 1 ,执行下述步骤:在一个随机下标处将字符串分割成两个非空的子字符串。即,如果已知字符串 s ,则可以将其分成两个子字符串 x 和 y ,且满足 s = x + y 。随机 决定是要「交换两个子字符串」还是要「保持这两个子字符串的顺序不变」。即,在执行这一步骤之后,s 可能是 s = x + y 或者 s = y + x 。在 x 和 y 这两个子字符串上继续从步骤 1 开始递归执行此算法。给你两个 长度相等 的字符串 s1 和 s2,判断 s2 是否是 s1 的扰乱字符串。如果是,返回 true ;否则,返回 false 。
福大大架构师每日一题
2021/09/03
5160
2021-08-18:扰乱字符串。使用下面描述的算法可以扰乱字符串 s 得到字符串 t :1.如果字符串的长度为 1 ,算法停止
2021-06-24:求一个字符串中,最长无重复字符子串长度。
2021-06-24:求一个字符串中,最长无重复字符子串长度。 福大大 答案2021-06-24: 方法一:滑动窗口。自然智慧。 不重复的时候,右指针右移;重复的时候,左指针右移。 方法二:求出最右不重复位置。 map:key是值,value是数组序号,初始值value都是-1。 时间复杂度:O(N)。空间复杂度:O(不同字符个数)。 代码用golang编写。代码如下: package main import "fmt" func main() { s := "moonfdd" ret1 := le
福大大架构师每日一题
2021/06/25
2830
2021-06-24:求一个字符串中,最长无重复字符子串长度。
2021-06-24:求一个字符串中,最长无重复字符子串长度。
2021-06-24:求一个字符串中,最长无重复字符子串长度。 福大大 答案2021-06-24: 采用滑动窗口。 代码用golang编写。代码如下: package main import "fmt" func main() { s := "moonfdd" ret := lengthOfLongestSubstring(s) fmt.Println(ret) } func lengthOfLongestSubstring(s string) int { // 哈希集合,记录每个字符
福大大架构师每日一题
2021/08/05
3280
2021-08-04:给定一个字符串str,当然可以生成很多子序列。返回有多少个子序列是回文子序列,空序列不算回文。比如,str
2021-08-04:给定一个字符串str,当然可以生成很多子序列。返回有多少个子序列是回文子序列,空序列不算回文。比如,str = “aba”,回文子序列:{a}、{a}、 {a,a}、 {b}、{a,b,a},返回5。
福大大架构师每日一题
2021/08/06
3330
2022-03-25:给定一个长度为 N 的字符串 S,由字符‘a‘和‘b‘组成,空隙由 ‘?‘ 表示。 你的任务是用a字符或b字符替换每个间隙, 替换完成后想
2022-03-25:给定一个长度为 N 的字符串 S,由字符'a'和'b'组成,空隙由 '?' 表示。 你的任务是用a字符或b字符替换每个间隙, 替换完成后想让连续出现同一种字符的最长子串尽可能短。
福大大架构师每日一题
2022/03/25
1.4K0
2021-06-11:给定两个字符串s1和s2,问s2最少删除多少字符可以成为s1的子串?
2021-06-11:给定两个字符串s1和s2,问s2最少删除多少字符可以成为s1的子串? 比如 s1 = "abcde",s2 = "axbc"。
福大大架构师每日一题
2021/06/11
3890
2021-06-11:给定两个字符串s1和s2,问s2最少删除多少字符可以成为s1的子串?
2021-07-03:给定一个只由左括号和右括号的字符串,返回最长的有效括号子串的长度。
2021-07-03:给定一个只由左括号和右括号的字符串,返回最长的有效括号子串的长度。
福大大架构师每日一题
2021/08/05
8330
2021-08-15:给定一个字符串Str,返回Str的所有子序列中有多少不同的字面值。
2021-08-15:给定一个字符串Str,返回Str的所有子序列中有多少不同的字面值。
福大大架构师每日一题
2021/09/03
5050
2021-08-15:给定一个字符串Str,返回Str的所有子序列中有多少不同的字面值。
2021-12-27:给定一个字符串str,和一个正数k, str子序列的字符种数必须是k种,返回有多少子序列满足这个条件。 已
假设有3种字符,k=2,那么种类上就是3取2,然后2种字符词频,求2的n次方相乘,最后累加。
福大大架构师每日一题
2021/12/29
2910
2021-12-27:给定一个字符串str,和一个正数k,
str子序列的字符种数必须是k种,返回有多少子序列满足这个条件。
已
2023-01-06:给定一个只由小写字母组成的字符串str,长度为N, 给定一个只由0、1组成的数组arr,长度为N, arr[i] == 0表示str中i位
2023-01-06:给定一个只由小写字母组成的字符串str,长度为N,给定一个只由0、1组成的数组arr,长度为N,arri等于 0 表示str中i位置的字符不许修改,arri 等于 1表示str中i位置的字符允许修改,给定一个正数m,表示在任意允许修改的位置,可以把该位置的字符变成a~z中的任何一个,可以修改m次。返回在最多修改m次的情况下,全是一种字符的最长子串是多长。1 <= N, M <= 10^5,所有字符都是小写。来自字节。答案2023-01-06:尝试全变成a一直到全变成z,遍历26次。每次
福大大架构师每日一题
2023/01/06
1.3K0
2023-01-06:给定一个只由小写字母组成的字符串str,长度为N, 给定一个只由0、1组成的数组arr,长度为N, arr[i] == 0表示str中i位
2021-06-25:只由小写字母(a~z)组成的一批字符串,都放在字符类型的数组String[] arr中,如果其中某两个字符
2021-06-25:只由小写字母(a~z)组成的一批字符串,都放在字符类型的数组String[] arr中,如果其中某两个字符串所含有的字符种类完全一样,就将两个字符串算作一类,比如:baacbba和bac就算作一类。返回arr中有多少类?
福大大架构师每日一题
2021/08/05
6130
2021-06-27:给定一个正数数组arr,代表若干人的体重。再给定一个正数limit,表示所有船共同拥有的载重量。每艘船最多
2021-06-27:给定一个正数数组arr,代表若干人的体重。再给定一个正数limit,表示所有船共同拥有的载重量。每艘船最多坐两人,且不能超过载重,想让所有的人同时过河,并且用最好的分配方法让船尽量少。返回最少的船数。
福大大架构师每日一题
2021/08/05
4050
2021-02-06:假设字符串str长度为N,请问最长回文子串的长度是多少?
3)理解 L…(i`)…C…(i)…R 的结构,以及根据i’回文长度进行的状况划分。
福大大架构师每日一题
2021/02/06
5680
2021-02-06:假设字符串str长度为N,请问最长回文子串的长度是多少?
2021-07-02:正则表达式匹配。给定一个字符串s和一个匹配串p。"."匹配单个字符。"*"匹配左边元素的多个字符。判断p是
2021-07-02:正则表达式匹配。给定一个字符串s和一个匹配串p。"."匹配单个字符。"*"匹配左边元素的多个字符。判断p是否匹配s。比如s="ab",p="a.",返回true。比如s="ab",p="a*",返回false。比如s="aaa",p="a*",返回true。比如s="moonfdd",p="k*moonfdd",返回true,因为"*"表示零个或者多个,这里'k'表示0个。
福大大架构师每日一题
2021/08/05
8440
2021-08-28:给定一个正数数组arr,长度一定大于6(>=7),一定要选3个数字做分割点,从而分出4个部分,并且每部分都
2021-08-28:给定一个正数数组arr,长度一定大于6(>=7),一定要选3个数字做分割点,从而分出4个部分,并且每部分都有数,分割点的数字直接删除,不属于任何4个部分中的任何一个。返回有没有可能分出的4个部分累加和一样大,如:{3,2,3,7,4,4,3,1,1,6,7,1,5,2},可以分成{3,2,3}、{4,4}、{1,1,6}、{1,5,2}。分割点是不算的!
福大大架构师每日一题
2021/09/03
2370
2021-08-28:给定一个正数数组arr,长度一定大于6(>=7),一定要选3个数字做分割点,从而分出4个部分,并且每部分都
2021-02-08:给定一个字符串str,请问这个字符串的最长回文子序列长度是多少?
2021-02-08:给定一个字符串str,请问这个字符串的最长回文子序列长度是多少?
福大大架构师每日一题
2021/02/08
4240
2021-02-08:给定一个字符串str,请问这个字符串的最长回文子序列长度是多少?
2021-08-04:给定一个字符串str,当然可以生成很多子序列
2021-08-04:给定一个字符串str,当然可以生成很多子序列。返回有多少个子序列是回文子序列,空序列不算回文。比如,str = “aba”,回文子序列:{a}、{a}、 {a,a}、 {b}、{a,b,a},返回5。
福大大架构师每日一题
2021/08/04
2800
2021-08-04:给定一个字符串str,当然可以生成很多子序列
推荐阅读
2021-08-30:给定两个字符串str1和str2,在str1中寻找一个
9690
2021-12-18:找到字符串中所有字母异位词。 给定两个字符
2120
2021-11-13:至少有 K 个重复字符的最长子串。给你一个字符串 s 和一个整数 k ,请你找出 s 中的最长子串, 要求
6080
2021-08-18:扰乱字符串。使用下面描述的算法可以扰乱字符串 s 得到字符串 t :1.如果字符串的长度为 1 ,算法停止
5160
2021-06-24:求一个字符串中,最长无重复字符子串长度。
2830
2021-06-24:求一个字符串中,最长无重复字符子串长度。
3280
2021-08-04:给定一个字符串str,当然可以生成很多子序列。返回有多少个子序列是回文子序列,空序列不算回文。比如,str
3330
2022-03-25:给定一个长度为 N 的字符串 S,由字符‘a‘和‘b‘组成,空隙由 ‘?‘ 表示。 你的任务是用a字符或b字符替换每个间隙, 替换完成后想
1.4K0
2021-06-11:给定两个字符串s1和s2,问s2最少删除多少字符可以成为s1的子串?
3890
2021-07-03:给定一个只由左括号和右括号的字符串,返回最长的有效括号子串的长度。
8330
2021-08-15:给定一个字符串Str,返回Str的所有子序列中有多少不同的字面值。
5050
2021-12-27:给定一个字符串str,和一个正数k, str子序列的字符种数必须是k种,返回有多少子序列满足这个条件。 已
2910
2023-01-06:给定一个只由小写字母组成的字符串str,长度为N, 给定一个只由0、1组成的数组arr,长度为N, arr[i] == 0表示str中i位
1.3K0
2021-06-25:只由小写字母(a~z)组成的一批字符串,都放在字符类型的数组String[] arr中,如果其中某两个字符
6130
2021-06-27:给定一个正数数组arr,代表若干人的体重。再给定一个正数limit,表示所有船共同拥有的载重量。每艘船最多
4050
2021-02-06:假设字符串str长度为N,请问最长回文子串的长度是多少?
5680
2021-07-02:正则表达式匹配。给定一个字符串s和一个匹配串p。"."匹配单个字符。"*"匹配左边元素的多个字符。判断p是
8440
2021-08-28:给定一个正数数组arr,长度一定大于6(>=7),一定要选3个数字做分割点,从而分出4个部分,并且每部分都
2370
2021-02-08:给定一个字符串str,请问这个字符串的最长回文子序列长度是多少?
4240
2021-08-04:给定一个字符串str,当然可以生成很多子序列
2800
相关推荐
2021-08-30:给定两个字符串str1和str2,在str1中寻找一个
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档