华为OD机试真题 Java 实现【最左侧冗余覆盖子串】【2023Q2 100分】

在这里插入图片描述

一、题目描述

给定两个字符串 s1 和 s2 和正整数k,其中 s1 长度为 n1,s2 长度为 n2, 在s2中选一个子串,满足:

  1. 该子串长度为n1+k;
  2. 该子串中包含s1中全部字母;
  3. 该子串每个字母出现次数不小于s1中对应的字母, 我们称s2以长度k冗余覆盖s1, 给定s1,s2,k, 求最左侧的s2以长度k冗余覆盖s1的
    子串的首个元素的下标, 如果没有返回-1。

二、输入描述

输入为三行:

  1. 第一行为 s1
  2. 第二行为 s1
  3. 第三行为 k

s1和s2都只包含小写字母。

三、输出描述

最左侧的 s2 以长度 k 冗余覆盖 s1 的子串的首个元素下标,若不存在,则返回-1。

四、解题思路

  1. 读取输入的字符串s1、s2和正整数k;
  2. 如果s2的长度小于s1的长度加上k,直接输出-1;
  3. 初始化一个大小为128的整型数组arr,用于记录s1中每个字母出现的次数;
  4. 遍历字符串s1,将每个字母出现的次数记录在arr数组中;
  5. 初始化变量num为s1的长度,表示需要匹配的字母个数;
  6. 在长度为n1+k的子串中,

你可能感兴趣的:(java,算法,华为机试)