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

广西网站建设设计电子商务网站的建设费用案例

广西网站建设设计,电子商务网站的建设费用案例,制作网站公司 可以要求后续修改吗,营销培训去哪个学校好滑动窗口 找到字符串中所有字母异位词滑动窗口数组优化 上期经典 找到字符串中所有字母异位词 难度 - 中等 Leetcode 438 - 找到字符串中所有字母异位词 给定两个字符串 s 和 p,找到 s 中所有 p 的 异位词 的子串,返回这些子串的起始索引。不考虑答案输出…

滑动窗口

  • 找到字符串中所有字母异位词
    • 滑动窗口
    • 数组优化
  • 上期经典

找到字符串中所有字母异位词

难度 - 中等
Leetcode 438 - 找到字符串中所有字母异位词

给定两个字符串 s 和 p,找到 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 * 1e4
s 和 p 仅包含小写字母

在这里插入图片描述

滑动窗口

这个所谓的字母异位词,不就是排列吗,相当于,输入一个串 S,一个串 T,找到 S 中所有 T 的排列,返回它们的起始索引。

因为字符串 p 的异位词的长度一定与字符串 p 的长度相同,所以我们可以在字符串 s 中构造一个长度为与字符串 p 的长度相同的滑动窗口,并在滑动中维护窗口中每种字母的数量;当窗口中每种字母的数量与字符串 p 中每种字母的数量相同时,则说明当前窗口为字符串 p 的异位词。

构造滑动窗口时,我们用双指针,右指针代表扩大窗口,左指针代表缩小窗口,在扩大和缩小窗口时,我们把满足条件的字符加入到对比的hash 表中,

代码演示:

 /*** 异位* @param s* @param p* @return*/public List<Integer> findAnagrams(String s, String p) {HashMap<Character, Integer> need = new HashMap<>();HashMap<Character, Integer> wind = new HashMap<>();//将目标值加进来for (char c : p.toCharArray()){need.put(c,need.getOrDefault(c,0) + 1);}int left = 0;int right = 0;int valid = 0;ArrayList<Integer> ans = new ArrayList<>();while (right < s.length()){char c = s.charAt(right);right++;if (need.containsKey(c)){wind.put(c,wind.getOrDefault(c,0) + 1);if (need.get(c).equals(wind.get(c))){valid++;}}//判断什么时候缩小窗口while (right - left >= p.length()){//满足条件时 将起始位置加进去if (valid == need.size()){ans.add(left);}char d = s.charAt(left);left++;if (need.containsKey(d)){if (wind.get(d).equals(need.get(d))){valid--;}wind.put(d,wind.get(d) - 1);}}}return ans;}

数组优化

因为 题目中说是小写字母组成的,范围就是固定的,可以利用数组来优化掉hash 表,
带来两个好处:
1.时间更快,数组的效率高于hash.
2.空间更省,数组占用空间小于hash.

代码演示:

    public List<Integer> findAnagrams(String s, String p) {ArrayList<Integer> ans = new ArrayList<>();int n = s.length();int m = p.length();if (n < m){return ans;}int[] need = new int[26];int[] wind = new int[26];//将目标值加进来for (char c : p.toCharArray()){++need[c - 'a'];}int left = 0;int right = 0;while (right < n){char c = s.charAt(right);right++;if (need[c - 'a'] != 0){++wind[c - 'a'];}//判断什么时候缩小窗口while (right - left >= m){//满足条件时 将起始位置加进去if (Arrays.equals(need,wind)){ans.add(left);}char d = s.charAt(left);left++;if (need[d - 'a'] != 0){wind[d - 'a']--;}}}return ans;}

上期经典

leetcode 567. 字符串的排列

http://www.yayakq.cn/news/675295/

相关文章:

  • 建设产品网站网站登录慢
  • 如何开wordpress网站网站开发的阶段流程图
  • 公司网页网站建设 ppt软件最全的网站
  • 做一个网站得做多少个页面网络网站开发设计
  • 成都网站设计费用广告公司排行榜
  • 凡科免费建站怎么样wordpress 导航图片
  • 鞍山SEO网站推广公司网站备案需要关站
  • 建设论坛网站大全北京电脑培训班零基础
  • 红河州网站建设网站后台管理的超级链接怎么做
  • 顺德公益网站制作汕头市建设工程交易网
  • 推荐网站建设的书如何一键建淘宝客网站
  • 中国内销做哪个网站安全的企业网站开发
  • 广州企业网站找哪里国家建设工程信息网官网
  • seo网站建设费用做住宿的有几个网站
  • 汨罗网站seo如何做购物网站推广
  • 企业网站系统设计与实现cod单页建站工具
  • 办公类网站开发背景重庆市工程造价信息网查询
  • 襄阳网站seo方法python 网站开发 sae
  • 网站建设费用计入管理费用欧美风格的网站
  • 深圳市网站建设公司宁远县做网站的
  • 仿京东网站后台wordpress linux 建站
  • 做旅游的海报图片网站wordpress左对齐代码
  • 宝塔服务器搭建网站教程泰安建设工程信息网
  • 长宁手机网站建设在网上怎么开店卖东西
  • php网站开发技术 pdf南宁做网站费用
  • 搭建网站流程263企业邮箱怎么注册
  • 网站需要加wordpress微信公众号做留言网站
  • 做新闻门户网站需要什么网站建设it
  • 自己有域名怎么做网站建站做网站
  • 网站建设公司客户来源渠道上海本地企业