[抄题]:

给定一个字符串 s 和一个 非空字符串 p ,找到在 s 中所有关于 p 的字谜的起始索引。
字符串仅由小写英文字母组成,字符串 s 和 p 的长度不得大于 40,000。
输出顺序无关紧要.

样例

给出字符串 s = "cbaebabacd" p = "abc"
返回 [0, 6]

子串起始索引 index = 0 是 "cba",是"abc"的字谜.
子串起始索引 index = 6 是 "bac",是"abc"的字谜.

[暴力解法]:

时间分析:

空间分析:

[思维问题]:

[一句话思路]:

先初始化,再统计p位之后的绝对值之和。

[输入量]:空: 正常情况:特大:特小:程序里处理到的特殊情况:异常情况(不合法不合理的输入):

[画图]:

sliding window的原理是数数字,向右滑动时,count(r)++,count(l)--

[一刷]:

  1. 字符串处理一个个的字母时,要用.tochararray先把字符串转成数组
  2. det也是数组,absSum是其的绝对值求和
  3. det 有几个元素算几个,用for (int item : det)简写
  4. s.toCharArray();表示对方法的调用
  5. list一定要用linkedlist or arraylist来实现,不能直接复制粘贴

[二刷]:

  1. 特殊判断必须要写
  2. 搞清楚det的含义 = sc - pc pc增加,det = r - l r增加
  3. 在之后的数组中,都是计算cntS[] 数组的数量
  4. absSum要用Math.abs

[三刷]:

[四刷]:

[五刷]:

[五分钟肉眼debug的结果]:

[总结]:

根据表格进行联想

[复杂度]:Time complexity: O(n) Space complexity: O(n)

[英文数据结构或算法,为什么不用别的数据结构或算法]:

[其他解法]:

[Follow Up]:

[LC给出的题目变变变]:

242. Valid Anagram 用deta求absSum

567. Permutation in String 两根指针?不懂

[代码风格] :

  1. cntS 才符合骆驼命名法

public class Solution {/*** @param s: a string* @param p: a string* @return: a list of index*/public List<Integer> findAnagrams(String s, String p) {//initializationList<Integer> ans = new LinkedList<>();//corner caseif (s.length() < p.length()) {return ans;}char[] sc = s.toCharArray();char[] pc = p.toCharArray();int[] cntS = new int[256];int[] cntP = new int[256];int[] det = new int[256];//count firstint absSum = 0;for (int i = 0; i < p.length(); i++) {cntS[sc[i]]++;cntP[pc[i]]++;det[sc[i]]++;det[pc[i]]--;}for (int item : det) {absSum += Math.abs(item);}if (absSum == 0) {ans.add(0);}//count restfor (int i = p.length(); i < s.length(); i++) {int r = sc[i];int l = sc[i - p.length()];System.out.println("sc[i]="+sc[i]);System.out.println("r="+r);cntS[r]++;//both scntS[l]--;absSum = absSum - Math.abs(det[r]) - Math.abs(det[l]);//abs
            det[l]--;det[r]++;absSum = absSum + Math.abs(det[r]) + Math.abs(det[l]);if (absSum == 0) {ans.add(i - p.length() + 1);}}return ans;}
}

View Code

转载于:https://www.cnblogs.com/immiao0319/p/8450432.html

子串字谜substring anagrams相关推荐

  1. leetcode算法—无重复字符的最长子串 Longest Substring Without Repeating Characters

    关注微信公众号:CodingTechWork,一起学习进步. 题目 Longest Substring Without Repeating Characters: Given a string, fi ...

  2. LeetCode.3-最长无重复字符子串(Longest Substring Without Repeating Characters)

    这是悦乐书的第341次更新,第365篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Medium级别的第2题Longest Substring Without Repeating Cha ...

  3. java求子串_Java substring()方法:求子字符串(截取字符串)

    String 类中的 substring() 方法实现对字符串从指定的索引位置开始截取,直到此字符串的末尾,并返回一个新的字符串. 语法1 substring(int beginIndex) 参数说明 ...

  4. freemarker中的substring取子串

    freemarker中的substring取子串 1.substring取子串介绍 (1)表达式?substring(from,to) (2)当to为空时,默认的是字符串的长度 (3)from是第一个 ...

  5. java判断字符串是子串_【Java】判断字符串是否包含子字符串

    java截取相关 1.length() 字符串的长度 例:char chars[]={'a','b'.'c'}; String s=new String(chars); int len=s.lengt ...

  6. python 字符串子串_Python字符串子字符串

    python 字符串子串 A substring is the part of a string. Python string provides various methods to create a ...

  7. 最长不重复子串python_寻找最长不重复子串

    寻找最长不重复子串 Longest Substring Without Repeating Characters Given a string, find the length of the long ...

  8. LeetCode 从零单刷个人笔记整理(持续更新)

    更新至2020.2.23 github:https://github.com/ChopinXBP/LeetCode-Babel 本人博客用于个人对知识点的记录和巩固. 用几乎所有可行的方法进行了实现和 ...

  9. leetcode 做的题目总结

    完美完成的题目 001-两数之和(two sum)-java(2,简单算法-数组) 002-两数相加(add two numbers)-java(2,中级算法-链表) 006-N 字形变换(1,中级遍 ...

最新文章

  1. Linux_Command
  2. oracle导出数据库中表出现导出报错(EXP-00003)未找到段 (0,0) 的存储定义
  3. 信息学奥赛C++语言:优惠购物
  4. spring boot 2.x静态资源会被HandlerInterceptor拦截的原因和解决方法
  5. android蓝牙协议栈bluedroid分析,安卓系统蓝牙协议栈 bluedroid 的使能
  6. iOS开发笔记--宏定义的黑魔法 - 宏菜鸟起飞手册
  7. DPDK Release 20.11
  8. 华为设备IP路由表管理命令
  9. ubuntu16.04安装及卸载anaconda3
  10. 计算机最早应用于( )领域,计算机最早被应用于()领域。
  11. matlab高通滤波函数,巴特沃斯高通滤波器—matlab实现
  12. 义冢oj P5033打气球
  13. 图计算: 使用 Spark Graphx Pregel API 处理分层数据
  14. 小米更新显示非官方rom_小米红米手机ROOT后支付宝提示“支持环境风险”+TWRP_recovery刷机出现ZIP刷机包前面校验失败...
  15. Vpp源码解读--workhandoff处理
  16. GridView动态添加列并判断绑定数据DataTable的列类型控制展示内容
  17. 搭建Web服务器-迅为IMX6ULL开发板
  18. uniapp聊天室动画加载新消息
  19. 在tinymce富文本中上传本地视频编辑器中不能预览的解决方案
  20. 计算机教学拼音打字教案,小学信息技术第2单元 Windows的常用功能第10课 中文输入法教案...

热门文章

  1. 如果通过当前元素知道父元素、同级元素
  2. mybatis 批量增加 Parameter '__frch_item_0' not found. Available parameters are [list]
  3. 基于ArcGIS JS API 的点击查询功能
  4. JVM 运行时数据区详解,写得非常好!
  5. 我画了35张图,就是为了让你深入理解 AQS
  6. Struts2 为什么被淘汰?自己作死!
  7. 腾讯面试官:如何停止一个正在运行的线程?我一脸蒙蔽。。。
  8. 2020 年 DevOps 七大发展趋势
  9. 毕业三年,贷款40万创业之后我又做回了程序员
  10. Java 多线程三大核心