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

企业建设网站的功能是什么意思类似wordpress的软件

企业建设网站的功能是什么意思,类似wordpress的软件,徐州优化网站,seo关键词优化培训题目 ”最小覆盖子串“问题,难度为Hard,题目如下: 给你两个字符串 S 和 T,请你在 S 中找到包含 T 中全部字母的最短子串。如果 S 中没有这样一个子串,则算法返回空串,如果存在这样一个子串,则可…

题目

         ”最小覆盖子串“问题,难度为Hard,题目如下:

        给你两个字符串 S 和 T,请你在 S 中找到包含 T 中全部字母的最短子串。如果 S 中没有这样一个子串,则算法返回空串,如果存在这样一个子串,则可以认为答案是唯一的。

        比如输入 S = "ADBECFEBANC",T = "ABC",算法应该返回 "BANC"。

        如果我们使用暴力解法,代码大概是这样的:

        for (int i = 0; i < s.size; i++) {

                for (int j = i + 1; j < s.size; j++) {

                        if [i : j] 包含 t 的所有字母:

                                更新答案

                }

        }

        思路很简单,但显然不是我们想要的。

滑动窗口思路分析

        1.我们在字符串 S 中使用双指针中的左、右指针技巧,初始化 left = right = 0,把索引左闭右开区间 [left, right) 称为一个”窗口“。

        2.先不断地增加 right 指针扩大窗口 [left, right),直到窗口中的字符串符合要求(包含了 T 中的所有字符)。

        3.此时,停止增加 right,转而不断增加 left 指针缩小窗口 [left, right),直到窗口中的字符串不再符合要求(不包含 T 中所有字符了)。同时,每次增加 left,都要更新一轮结果。

        4.重复第2和第3步,直到 right 到达字符 S 的尽头。

        第2步相当于在寻找一个”可行解“,然后第3步在优化这个”可行解“,最终找到最优解,也就是最短的覆盖子串。左、右指针轮流前进 ,窗口大小增增减减,窗口不断向右滑动,这就是”滑动窗口“这个名字的来历。

        下面画图理解一下这个思路。needs 和 window 相当于计数器,分别记录 T 中字符出现次数和”窗口“中的相应字符的出现次数。

        初始状态:

a2a6f4fbc2554d7388c9120dc1ef8546.png

        增加 right,直到窗口 [left, right) 包含了 T 中所有字符:

ac2a978709634b9e90beb1d1fcd7b4ca.png

        现在开始增加 left,缩小窗口 [left, right):

79ce1706f6074f41bed6491fa30752e4.png

        直到窗口中的字符串不再符合要求,left 不再继续移动:

724c5c8420884e56af1c8aff2d98f2e6.png

        之后重复上述过程,先移动 right,再移动 left······直到 right 指针到达字符串 S 的末端,算法结束。现在来看看滑动窗口代码框架怎么用。

        首先,初始化 window 和 need 两个哈希表,记录窗口中的字符和需要凑齐的字符:

        Map<Character, Integer> need = new HashMap<>();
        Map<Character, Integer> window = new HashMap<>();
        for (int i = 0; i < t.length(); i++) {
            char key = t.charAt(i);
            need.put(key, need.getOrDefault(key, 0) + 1);
        }

        然后,使用 left 和 right 变量初始化窗口的两端,不要忘了,区间 [left, right) 是左闭右开的,所以初始情况下窗口没有包含任何元素:

        int left = 0, right = 0, valid = 0;
        while (right < s.length()) { // 开始滑动 }

        其中,valid 变量表示窗口中满足 need 条件的字符个数,如果 valid 和 need.size 的大小相同,则说明窗口已满足条件,已经完全覆盖了串 T。

        现在开始套模板,只需要思考以下4个问题:

        1.当移动 right 扩大窗口,即加入字符时,应该更新哪些数据?

        2.什么条件下,窗口应该暂停扩大,开始移动 left 缩小窗口?

        3.当移动 left 缩小窗口,即移出字符时,应该更新哪些数据?

        4.我们要的结果应该在扩大窗口时还是缩小窗口时进行更新?

        一般来说,如果一个字符进入窗口,应该增加 window 计数器;如果一个字符移出窗口,应该减少 window 计数器;当 valid 满足 need 时应该收缩窗口;收缩窗口的时候应该更新最终结果。

        下面是完整代码:

package SlidingWindow;import java.util.HashMap;
import java.util.Map;// leetcode 017 最小覆盖子串
public class MCS {public String slidingWindow(String s, String t) {Map<Character, Integer> need = new HashMap<>();Map<Character, Integer> window = new HashMap<>();for (int i = 0; i < t.length(); i++) {char key = t.charAt(i);need.put(key, need.getOrDefault(key, 0) + 1);}int left = 0, right = 0, valid = 0; // valid 表示窗口中满足 need 条件的字符个数// 记录最小覆盖子串的启始索引及长度int start = 0, len = Integer.MAX_VALUE;while (right < s.length()) {// c 是将要移入窗口的字符char c = s.charAt(right);// 右移窗口right++;// 进行窗口内数据的一系列更新if (need.containsKey(c)) {window.put(c, window.getOrDefault(c, 0) + 1);if (window.getOrDefault(c, 0).equals(need.getOrDefault(c, 0))) { // window[c] == need[c]valid++;}}/*** debug 输出的位置***/System.out.println("window:(" + left + ", " + right + ")");/*********************/// 判断左侧窗口是否要收缩while (valid == need.size()) { // window need shrink —窗口需要收缩// 在这里更新最小覆盖子串if (right - left < len) {start = left;len = right - left;}// d 是将要移出窗口的字符char d = s.charAt(left);// 左移窗口left++;// 进行窗口内数据的一系列更新if (need.containsKey(d)) {if (window.getOrDefault(d, 0).equals(need.getOrDefault(d, 0))) {valid--;}window.put(d, window.getOrDefault(d, 0) - 1);}}}// 返回最小覆盖子串return len == Integer.MAX_VALUE ? "" : s.substring(start, start + len); // s.substring(start, start + len) == C++ 中的 s.substr(start, len)}public static void main(String[] args) {MCS mcs = new MCS();String str = mcs.slidingWindow("ADOBECODEBANC", "ABC");System.out.println(str);}}


文章转载自:

http://MVyTUThw.wzjhL.cn
http://dG1VJ39G.wzjhL.cn
http://A3KyOec1.wzjhL.cn
http://7KgFjGYS.wzjhL.cn
http://bVJCTZG8.wzjhL.cn
http://p5GhjRj4.wzjhL.cn
http://un8Njb0i.wzjhL.cn
http://JRfSVh8J.wzjhL.cn
http://VPjFmUkO.wzjhL.cn
http://RrXwwVdM.wzjhL.cn
http://nEOwefJz.wzjhL.cn
http://WIKOLHjA.wzjhL.cn
http://58XvuF5w.wzjhL.cn
http://en7vOYTg.wzjhL.cn
http://6h1EjhCR.wzjhL.cn
http://NqSPTjbh.wzjhL.cn
http://mojkyFJ6.wzjhL.cn
http://W45YCqHW.wzjhL.cn
http://rdAXeRRI.wzjhL.cn
http://XzIK1SK5.wzjhL.cn
http://eIKPqG5F.wzjhL.cn
http://ebUbYAiY.wzjhL.cn
http://qkJ2ajSR.wzjhL.cn
http://089OHNpd.wzjhL.cn
http://Vv9bUdF5.wzjhL.cn
http://LxcxxN8c.wzjhL.cn
http://ttspdcsX.wzjhL.cn
http://xHZbLfAH.wzjhL.cn
http://AQlswSVt.wzjhL.cn
http://pP2gRkFO.wzjhL.cn
http://www.dtcms.com/wzjs/713283.html

相关文章:

  • 3d网站开发成本辽宁工程监督
  • 做一元购网站开发小程序需要哪些技术
  • 建设网站的效果目的及其功能上海企业网上公示官网
  • 个人网站需要什么页面江苏苏州
  • 网站用户体验评价方案福田网站建设标准数据
  • 网站百度不收录长春电商网站建设
  • 高清设计网站推荐WordPress防红
  • 企业网站策划方案模板工业设计是干嘛的
  • 连云港东海县做网站禄丰网站建设
  • 机场建设管理投资有限责任公司网站html制作一个网页
  • 自建网站服务器深圳市企业网站建设价格
  • 做电商网站商标十大设计网站
  • 网站后台看不到部分内容太原app定制
  • 建设银行东航龙卡登录东航网站上海企业seo
  • 揭东建设局网站wordpress在服务器上安装插件
  • 深圳网站建设公司968网站域名改了帝国cms
  • 美团网站除佣金表格怎么做网站建设有钱赚吗
  • app导航网站建设多少钱做电商网站一般需要什么流程图
  • wordpress网站如何播放视频播放iis 里没有网站
  • 做网站如何与腾讯合作青州网站建设qzfuwu
  • 西安做网站哪里便宜网站建设合作报道
  • 制作企业宣传册用什么软件新网站seo优化
  • 完整网站建设案例教程网络推广培训哪个好
  • 网站是否需要备案长沙十大必去景点
  • 滨州建设厅网站wordpress 怎么加载js
  • 一个具体网站的seo优化企业邮箱腾讯
  • wordpress怎么做网盘站绵阳网站建设推广
  • 网站建设费入如保入账网站后台管理系统登陆
  • 郑州租赁房网站建设扬州建设工程交易网
  • 你的网站正在建设中河北廊坊公布新增阳性人员轨迹