首页 > 其他分享 >leet code 567. 字符串的排列

leet code 567. 字符串的排列

时间:2023-12-07 12:01:44浏览次数:30  
标签:count leet code charAt ++ s2 s1 differ 567

567. 字符串的排列

题目描述

给你两个字符串 s1 和 s2
写一个函数来判断 s2 是否包含 s1 的排列。
如果是,返回 true ;否则,返回 false
换句话说,s1 的排列之一是 s2 的 子串 。

示例 1:

输入:s1 = "ab" s2 = "eidbaooo"

输出:true

解释:s2 包含 s1 的排列之一 ("ba")

示例 2:

输入:s1= "ab" s2 = "eidboaoo"

输出:false

提示:

  • leet code 567. 字符串的排列_移出
  • s1 和 s2 仅包含小写字母

题目解析

提取关键信息

  • s1,s2都是仅仅是由小写字母组成
  • 是否包含排列--而不是含有对应字符,即 s1 的排列是否是 s2 的子串之一
  • 很显然适合用滑动窗口来解决

show code

class Solution {
    public boolean checkInclusion(String s1, String s2) {
        int len1 = s1.length();
        int len2 = s2.length();
        if(len1 > len2) {
            return false;
        }
        // 创建一个数组,来保存  窗口内  各个字符出现的次数
        int[] count = new int[26];
        for(int i = 0;i < len1;i++) {
            count[s2.charAt(i) - 'a']++;
            count[s1.charAt(i) - 'a']--;
        }

        // 统计窗口内不同字符的个数
        int differ = 0;
        for(int i = 0;i < 26;i++) {
            if(count[i] != 0) {
                differ++;
            }
        }

        if(differ == 0) {
            return true;
        }

        // 遍历字符串 s2
        for(int i = 0;i < len2 - len1;i++) {
            // s2.charAt(i) 要移出窗口
            if(count[s2.charAt(i) - 'a'] == 1) {
                // 如果 count[s2.charAt(i) - 'a'] == 1 
                // 表示 这个字符  在窗口内 比 在s1中多出现了1次
                // 移出,相同字符个数 减少 1
                differ--;
            } else if(count[s2.charAt(i) - 'a'] == 0) {
                // 同理 这里增加 1
                differ++;
            }

            count[s2.charAt(i) - 'a']--;

            if(count[s2.charAt(i + len1) - 'a'] == -1) {
                differ--;
            } else if(count[s2.charAt(i + len1) - 'a'] == 0) {
                differ++;
            }

            count[s2.charAt(i + len1) - 'a']++;
            if(differ == 0) {
                return true;
            }
        }

        return false;
    }
}

标签:count,leet,code,charAt,++,s2,s1,differ,567
From: https://blog.51cto.com/u_16079703/8720037

相关文章

  • Educational Codeforces Round 158 (Rated for Div. 2)
    Preface补题,妈的现在EduE都做不来这搞毛啊A.LineTrip签到#include<cstdio>#include<iostream>#include<utility>#include<vector>#include<cstring>#include<cmath>#include<cstdlib>#include<algorithm>#include<queue&......
  • codeigniter3整合smarty
    Codeigniter3.0+Smarty-3.1.141、下载Smarty类库,并放到CI/Controller/libraries;2、创建控制器,并加载Smarty类,创建Smarty对象,同时设置Smarty关键目录 <?phpdefined('BASEPATH')ORexit('Nodirectscriptaccessallowed');classWelcomeextendsCI_Controller{......
  • vscode-go语言插件,调试器协议分析
    c客户端,vscodes服务端,调试器----------------------------------------------c-->客户端,请求调试器初始化{"command":"initialize","arguments":{"clientID":"vscode","clientName":......
  • Codeforces Round 913 (Div. 3)(A~F)
    A.Rook题意:在一个国际象棋棋盘中,横坐标为a-h,纵坐标为1-8,字母在前,数字在后,输入一个棋子的位置,输出该棋子所在的行与列中非棋子本身位置的所有位置。分析:模拟。代码:#include<iostream>#include<algorithm>usingnamespacestd;typedeflonglongll;constintN=2e5......
  • #yyds干货盘点# LeetCode程序员面试金典:统计各位数字都不同的数字个数
    题目给你一个整数n,统计并返回各位数字都不同的数字x的个数,其中0<=x<10n。 示例1:输入:n=2输出:91解释:答案应为除去11、22、33、44、55、66、77、88、99外,在0≤x<100范围内的所有数字。 示例2:输入:n=0代码实现classSolution{publicintcount......
  • #yyds干货盘点# LeetCode程序员面试金典:斐波那契数
    题目斐波那契数(通常用F(n)表示)形成的序列称为斐波那契数列。该数列由0和1开始,后面的每一项数字都是前面两项数字的和。也就是:F(0)=0,F(1)=1F(n)=F(n-1)+F(n-2),其中n>1给定n,请计算F(n)。 示例1:输入:n=2输出:1解释:F(2)=F(1)+F(0)=1+0......
  • 【题解】CodeForces 686E Optimal Point
    传送门:https://codeforces.com/contest/686/problem/E前言:本题解来源于作者某天晚上和一位朋友的发电内容(没错,这个作者直接把自己和朋友发电时发的话用markdown排了一下,传上来了),当时本来就比较口语化,加上作者的做法又实在太过离谱,因此可能语言表述不够清晰,对此深感抱歉qwq;离......
  • 全球超 250 万 Java 开发者使用 Visual Studio Code
    全球超250万Java开发者使用VisualStudioCode来源:OSCHINA编辑: 局2023-12-0611:28:00 6NickZhu是负责 VSCodeJava扩展的产品总监,昨天他在官方博客宣布,VisualStudioCode的活跃Java开发者已超过250万。来源:https://devblogs.microsoft.com......
  • 探索C语言中的Shellcode从提取到执行
    ShellCode是一种独立于应用程序的机器代码,通常用于实现特定任务,如执行远程命令、注入恶意软件或利用系统漏洞。在网络安全领域,研究Shellcode是理解恶意软件和提高系统安全性的关键一环。本文将深入探讨如何在C语言中提取Shellcode,并通过XOR加密技术增加其混淆程度。最后,我们将演示......
  • Codeforces Round 912 (Div. 2)
    Preface这场题莫名很对我胃口,因为F是个究极套路题,还是我最拿手的2-SAT,想+写不到半小时就搞定了然后E的核心思想和上周末VP的一场省赛的题一样,因此看一眼就会了唯一抽象的是D2要用对超集的sosdp,由于之前没写过就不知道还能这么搞A.HalloumiBoxes当\(k\ge2\)时,我们总可以通......