前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >2022-05-12:小歪每次会给你两个字符串: 笔记s1和关键词s2,请你写一个函数, 判断s2的排列之一是否是s1的子串。 如果是,返回true; 否则,返

2022-05-12:小歪每次会给你两个字符串: 笔记s1和关键词s2,请你写一个函数, 判断s2的排列之一是否是s1的子串。 如果是,返回true; 否则,返

原创
作者头像
福大大架构师每日一题
发布2022-05-12 21:54:18
3460
发布2022-05-12 21:54:18
举报
文章被收录于专栏:福大大架构师每日一题

2022-05-12:小歪每次会给你两个字符串:

笔记s1和关键词s2,请你写一个函数,

判断s2的排列之一是否是s1的子串。

如果是,返回true;

否则,返回false。

来自字节飞书团队。

答案2022-05-12:

欠债表。滑动窗口,str2存map。

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

代码语言:rust
复制
fn main() {
    let ans=check2("fabkbbca","abcb");
    println!("ans = {}",ans);
}

fn check2( s1:&str,  s2:&str) ->bool{
    if s1.chars().count() < s2.chars().count() {
        return false;
    }

    let str2: Vec<char> = s2.chars().collect::<Vec<_>>();
     let mut count:[isize;256]=[0;256];
    for i in 0..s2.chars().count() {
        count[str2[i] as usize]+=1;
    }
    let m = s2.chars().count() as isize;
    let  st1: Vec<char> = s1.chars().collect::<Vec<_>>();
    let mut in_valid_times:isize = 0;
    let mut r:isize = 0;
    while r < m {
        if count[st1[r as usize] as usize] <= 0 {
            in_valid_times+=1;
        }
        count[st1[r as usize] as usize]-=1;
        r+=1;
    }
    while r < st1.len() as isize {
        if in_valid_times == 0 {
            return true;
        }
        if count[st1[r as usize] as usize] <= 0 {
            in_valid_times+=1;
        }
        count[st1[r as usize] as usize]-=1;
        if count[st1[(r - m) as usize] as usize] < 0 {
            in_valid_times-=1;
        }
        count[st1[(r - m) as usize] as usize]+=1;
        r+=1;
    }
    return in_valid_times == 0;
}

执行结果如下:

在这里插入图片描述
在这里插入图片描述

左神java代码

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

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

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档