当前位置: 首页 > news >正文

剑指 Offer II 015. 字符串中的所有变位词

题目链接

剑指 Offer II 015. 字符串中的所有变位词 mid

题目描述

给定两个字符串 sp,找到 s中所有 p变位词 的子串,返回这些子串的起始索引。不考虑答案输出的顺序。

变位词 指字母相同,但排列不同的字符串。

示例 1:

输入: s = “cbaebabacd”, p = “abc”
输出: [0,6]
解释:
起始索引等于 0 的子串是 “cba”, 它是 “abc” 的变位词。
起始索引等于 6 的子串是 “bac”, 它是 “abc” 的变位词。

示例 2:

输入: s = “abab”, p = “ab”
输出: [0,1,2]
解释:
起始索引等于 0 的子串是 “ab”, 它是 “ab” 的变位词。
起始索引等于 1 的子串是 “ba”, 它是 “ab” 的变位词。
起始索引等于 2 的子串是 “ab”, 它是 “ab” 的变位词。

提示:

  • 1<=s.length,p.length<=3∗1041 <= s.length, p.length <= 3 * 10^41<=s.length,p.length<=3104
  • sp仅包含小写字母

分析:

先用一个 cnt[26]记录p中字符出现的次数的负数。

用两个指针 ij组成滑动窗口遍历 s。向右遇到一个新的字符,cnt[s[j]]++。当 cnt[s[j] > 0时,说明区间 [i,j]中有多余的字符。需要移动指针 i,从窗口中去掉多余的字符,cnt[s[i]]--

cnt[s[j] == 0j - i + 1 == s2.length时,说明此时 s[i,j]就是 p的变位词。记录区间起点 i到答案 ans中。

时间复杂度:O(n)O(n)O(n)

C++代码:

class Solution {
public:vector<int> findAnagrams(string s, string p) {int m = s.size() , n = p.size();int cnt[26] = {0};for(auto &c:p) cnt[c - 'a']--;vector<int> ans;for(int i = 0,j = 0;j < m;j++){cnt[s[j] - 'a']++;while(cnt[s[j] - 'a'] > 0){cnt[s[i] - 'a']--;i++;}if(j -i + 1 == n) ans.push_back(i);}return ans;}
};

Java代码:

class Solution {public List<Integer> findAnagrams(String s, String p) {List<Integer> ans = new ArrayList<>();int m = s.length();int n = p.length();int[] cnt = new int[26];for(var c:p.toCharArray()) cnt[c - 'a']--;for(int i = 0,j = 0;j < m;j++){cnt[s.charAt(j) - 'a']++;while(cnt[s.charAt(j) - 'a'] > 0){cnt[s.charAt(i) - 'a']--;i++;}if(j - i + 1 == n) ans.add(i);}return ans;}
}
http://www.lryc.cn/news/27207.html

相关文章:

  • 【SpringCloud】SpringCloud详细教程之微服务比较
  • 二.项目使用vue-router,引入ant-design-vue的UI框架,引入less
  • 网络安全怎么学?20年白帽子老江湖告诉你
  • 药房管理系统;药库管理系统
  • 深眸科技|机器视觉提升制造性能,焕发传统企业智造新活力!
  • ubuntu安装SSH的方法
  • 哪种蓝牙耳机通话效果好?通话清晰的蓝牙耳机推荐
  • IT运维如何完成一场高质量复盘
  • JVM调优面试题——基础知识
  • 三、mongdb 查询
  • python的 ping 网络状态监测方法(含多IP)
  • 【独家】华为OD机试提供C语言题解 - 单词反转
  • Linux docker环境安装,docker-compose安装,jdk17安装
  • 界面开发(3)--- PyQt5用户登录界面连接数据库
  • 以下真的没有任何要写的了,我需要凑字数,请大家原谅
  • 2023年 Java 发展趋势
  • Lsof命令介绍
  • LeetCode题目笔记——1487. 保证文件名唯一
  • 【概念辨析】结构体内存对齐
  • pg mysql oracle 中的schema
  • 电脑快捷方式删除文件后四种找回方法
  • Session会话管理
  • 极智开发 | ubuntu源码编译cuda版opencv
  • umi学习(umi4)
  • EasyPoi的excel模板预览与下载、导出简单/复杂数据
  • 收个滴滴Offer:从小伙三面经历,看看需要学点啥?
  • Spark Shuffle解析
  • Qt 解决程序全屏运行弹窗引发任务栏显示
  • 【进阶】2、搭建K8s集群【v1.23】
  • 11面向接口编程(下):一切皆服务,服务基于协议