首页 > 其他分享 >LeetCode567. 字符串的排列

LeetCode567. 字符串的排列

时间:2023-12-04 14:57:41浏览次数:28  
标签:map 排列 LeetCode567 startChar s1 char start 字符串 end

题目描述

image.png

思路:滑动窗口模板

  • 定义需要维护的变量
Map<Character, Integer> map = new HashMap<>();
Map<Character, Integer> map_s1 = new HashMap<>();
for (char c : s1.toCharArray()) {
	map_s1.put(c, map_s1.getOrDefault(c, 0) + 1);
}
  • 根据题意可知:窗口为固定大小所以用if
 if (end - start + 1 == s1.length()) {
	char startChar = s2.charAt(start);
	map.put(startChar, map.get(startChar) - 1);
	if (map.get(startChar) == 0) {
		map.remove(startChar);
	}
	start ++;
}

方法一:

class Solution {
    public boolean checkInclusion(String s1, String s2) {
        // 1. 定义需要维护的变量
        Map<Character, Integer> map = new HashMap<>();
        Map<Character, Integer> map_s1 = new HashMap<>();
        for (char c : s1.toCharArray()) {
            map_s1.put(c, map_s1.getOrDefault(c, 0) + 1);
        }

        // 2. 定义窗口边界
        int start = 0;
        for (int end = 0; end < s2.length(); end ++) {
            // 3. 更新需要维护的变量
            char currentChar = s2.charAt(end);
            map.put(currentChar, map.getOrDefault(currentChar, 0) + 1);
            if (map.equals(map_s1)) {
                return true;
            }
            if (end - start + 1 == s1.length()) {
                char startChar = s2.charAt(start);
                map.put(startChar, map.get(startChar) - 1);
                if (map.get(startChar) == 0) {
                    map.remove(startChar);
                }
                start ++;
            }
        }
        return false;
    }
}

标签:map,排列,LeetCode567,startChar,s1,char,start,字符串,end
From: https://www.cnblogs.com/keyongkang/p/17874907.html

相关文章

  • AcWing 835. Trie字符串统计
    题面:维护一个字符串集合,支持两种操作:①Ix向集合中插入一个字符串x;②Qx询问一个字符串在集合中出现了多少次。共有\(N\)个操作,所有输入的字符串总长度不超过\(105\),字符串仅包含小写英文字母。原题链接:835.Trie字符串统计-AcWingTrie字典树[1]//输入:Idog......
  • iOS代码安全加固利器:深入探讨字符串和代码混淆器的作用
    ​ 在网上搜“代码混淆”关键词,可以看到n多教程。包括本篇博客,大部分重要内容也是从网上各位大神的博客里面看到然后摘取和总结出来的。虽然网上都有,但是对于我个人来说,很难找到一篇博客概括完全的,所以还是总结一下,也算是学习的纪录。首先看看代码混淆是什么。总的来说,代码混......
  • AcWing 831. KMP字符串
    题面:给定一个字符串S,以及一个模式串P,所有字符串中只包含大小写英文字母以及阿拉伯数字。模式串P在字符串S中多次作为子串出现。求出模式串P在字符串S中所有出现的位置的起始下标。原题链接:831.KMP字符串-AcWing核心:next数组-最长相等前后缀next[i]存储......
  • AcWing 842. 排列数字 && AcWing 843. n-皇后问题
    842.排列数字(全排列)题面:给定一个整数\(n\),将数字\(1∼n\)排成一排,将会有很多种排列方法。现在,请你按照字典序将所有的排列方法输出。#include<iostream>usingnamespacestd;constintN=10;intpath[N];//保存序列boolst[N];//数字是否被用过,bool类型的全局变......
  • 基础-字符串的常用方法
    1、字符串的大小写转换.supper()---小写转换成大写.lower()---转换成小写.title()#单词首字母大写示例代码s="python"s1=s.upper();print(s1)#PYTHONs="PYTHON"s1=s.upper();print(s1)#pythons="ihaveadream"s1=s.title()#单词首字母大写print(s......
  • 基础-字符串
    1、字符串格式问题1#1、字符串格式问题2#我叫xx,我叫xxx3name=input("请出入名称")4adress=input("请出入地址")5age=int(input("请出年龄"))6hobby=input("请出爱好")8#%s字符串占位9#%d占位整数11#方法一12s1="我叫%s,我住在%s,我......
  • 【pwn】puts or system? --格式化字符串漏洞泄露libc基址
    还是先看一下保护情况开了canary,接着看主函数逻辑看到这里的代码逻辑,我一开始是想通过printf泄露出canary的值,然后再用ret2libc来打,但是我发现这个libc不好泄露,一般的泄露的思路都是构造ROP,通过puts函数泄露出puts的got表内容,但是我在寻找rdi这个gadget的时候,是找不到的这也......
  • ABC 331 F - Palindrome Query(字符串哈希,树状数组)
    字符串哈希[OI-Wiki](字符串哈希-OIWiki(oi-wiki.org))分为两种哈希方式:以左为高位和以右为高位如果只是快速查询每个字串的哈希值,用以左为高位比较简单,即\[Hash[l...r]=Hash[1...r]-Hash[1...(l-1)]\timesbase^{r-l+1}\]但是如果有修改操作,需要将每一位的Hash值存......
  • 无涯教程-Erlang - Strings(字符串)
    通过将字符串括在引号中,可以在Erlang中构造一个字符串文字,需要使用双引号(如"HelloLearnfk")构造Erlang中的字符串。-module(helloLearnfk).-export([start/0]).start()->Str1="Thisisastring",io:fwrite("~p~n",[Str1]).上面程序的输出将是-“Thisisa......
  • 字符串
    字符串字符串文字单引号,双引号print('单引号')print("双引号")单引号双引号why2种不能只用一种,无法正确判断一个字符串的终止位置字符串中的换行符\n代表换行“”“可以包括多行内容其他转义序列print("双引号:\"")双引号:"print("反斜线:\\")反斜线:\转......