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

0基础做网站用什么语言wordpress前端开发

0基础做网站用什么语言,wordpress前端开发,广西网站建设哪里好,建筑企业资质1. 引言 在字符串处理中,我们经常需要从一个较长的字符串中找到包含特定目标字符串的最短子串。这个问题在文本搜索、基因序列分析等领域有着广泛的应用。本文将介绍一种高效的算法来解决这个问题。 2. 问题描述 给定一个源字符串 source 和一个目标字符串 targe…

1. 引言

在字符串处理中,我们经常需要从一个较长的字符串中找到包含特定目标字符串的最短子串。这个问题在文本搜索、基因序列分析等领域有着广泛的应用。本文将介绍一种高效的算法来解决这个问题。

2. 问题描述

给定一个源字符串 source 和一个目标字符串 target,我们需要找到 source 中包含 target 所有字符的最短子串。如果找不到这样的子串,则返回空字符串。问题来源:炼码 32 · 最小子串覆盖

样例
样例 1:
输入:source = “abc” ;target = “ac”
输出:“abc”
解释:“abc” 是 source 的包含 target 的每一个字符的最短的子串。
样例 2:
输入:source = “adobecodebanc” ;target = “abc”
输出:“banc”
解释:“banc” 是 source 的包含 target 的每一个字符的最短的子串。
样例 3:
输入:source = “abc” ; target = “aa”
输出:“”
解释:没有子串包含两个 ‘a’。

3. 算法思路

为了解决这个问题,我们可以使用滑动窗口(Sliding Window)技术。滑动窗口是一种在数组或字符串上处理问题的有效方法,它可以在一次遍历中解决多个连续子数组或子字符串的问题。

步骤:
1、初始化:

  • 创建一个字典 targetCount 来记录 target 中每个字符的出现次数。
  • 创建一个字典 windowCount 来记录当前窗口中每个字符的出现次数。
  • 初始化两个指针 left 和 right,分别表示窗口的左右边界。
  • 初始化变量 matched 来记录当前窗口中已经匹配的 target 中的字符种类数。
  • 初始化变量 minStart 和 minLength 来记录最短子串的起始位置和长度。

2、扩展窗口:

  • 使用 right 指针向右移动,将字符添加到窗口中。
  • 更新 windowCount 和 matched。

3、缩小窗口:

  • 当窗口包含了 target 中的所有字符时(即 matched == targetCount.Count),尝试缩小窗口以找到更短的子串。
  • 使用 left 指针向左移动,从窗口中移除字符。
  • 更新 windowCount 和 matched。
  • 如果缩小后的窗口仍然包含 target 中的所有字符,并且长度更短,则更新 minStart 和 minLength。

4、返回结果:

  • 根据 minStart 和 minLength 从 source 中提取最短子串并返回。

4. 算法实现

以下是该算法的 C# 实现:

using System;
using System.Collections.Generic;class Program
{static void Main(){string source = "adobecodebanc";string target = "abc";string result = FindShortestSubstringContainingTarget(source, target);Console.WriteLine(result);  // Output: "banc"}static string FindShortestSubstringContainingTarget(string source, string target){if (string.IsNullOrEmpty(source) || string.IsNullOrEmpty(target))return string.Empty;Dictionary<char, int> targetCount = new Dictionary<char, int>();foreach (char c in target){targetCount[c] = 0;}foreach (char c in target){targetCount[c]++;}int left = 0, right = 0;int minStart = 0, minLength = int.MaxValue;int matched = 0;Dictionary<char, int> windowCount = new Dictionary<char, int>();while (right < source.Length){char rightChar = source[right];if (targetCount.ContainsKey(rightChar)){if (!windowCount.ContainsKey(rightChar))windowCount[rightChar] = 0;windowCount[rightChar]++;if (windowCount[rightChar] == targetCount[rightChar])matched++;}while (matched == targetCount.Count){if (right - left + 1 < minLength){minStart = left;minLength = right - left + 1;}char leftChar = source[left];if (targetCount.ContainsKey(leftChar)){windowCount[leftChar]--;if (windowCount[leftChar] < targetCount[leftChar])matched--;}left++;}right++;}return minLength == int.MaxValue ? string.Empty : source.Substring(minStart, minLength);}
}

输出结果
在这里插入图片描述

5. 示例分析

假设 source = “adobecodebanc”,target = “abc”。
初始时,left = 0,right = 0,matched = 0,minStart = 0,minLength = int.MaxValue。
随着 right 的移动,窗口逐渐扩展,直到包含 target 中的所有字符。
当窗口包含 abc 时(例如,当 right 指向 c 时),开始缩小窗口。
在缩小窗口的过程中,找到包含 abc 的最短子串 “banc”。

6. 结论

本文介绍了一种使用滑动窗口技术来寻找包含目标字符串的最短子串的算法。该算法通过维护一个窗口来动态地包含和排除字符,从而在一次遍历中找到了最短子串。这种方法不仅高效,而且易于理解和实现。

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

相关文章:

  • 重庆招聘网站有哪些wordpress哪款主题好用
  • 福州电子商务网站建设wordpress怎么改登陆不了
  • 网站做的好不好数据顺德网站建设效果
  • 百度蜘蛛抓取网站广东省广州市白云区广云路11号
  • 阿里云有网站建设吗自己做烘焙的网站
  • 网站三元素怎么做长沙制作公园仿竹护栏哪家好
  • 做网站知乎网站建设古典风格
  • 无锡专业做网站公司网站seo整站优化
  • 代理登录网站自己怎么弄网站
  • 电影网站如何做采集wordpress 简码插件
  • 河南网络建站济南seo优化公司助力排名
  • 网站建设百度帖吧陈铭生的原型是谁
  • .net网站开发实验报告网站的icp备案信息
  • 建设农业网站wordpress vip服务积分
  • 门户网站 开发注意手机在线做ppt模板下载网站有哪些
  • html 网站新功能介绍网页代理地址
  • 网站可不可以不添加源码直接添加模板甘肃建投土木工程建设有限公司网站后台
  • 建设网站的功能及目的seo推广的优缺点
  • 网站网络广州红鼎网站建设有限公司怎么样
  • 海南网站搭建商务网站建设流程
  • 新西兰网站后缀游戏网站建设计划书
  • 适合大学生做的网站大宗交易平台有哪些
  • 生物科技公司网站建设上海教育网站前置审批
  • 国外好用的网站阿里云域名 设置网站
  • 绵阳网站推广优化网络怎么做推广
  • 扬州住房和建设局网站用qt做网站可以吗
  • 手机网站怎么上传图片网站建设与网站管理
  • 小视频网站怎么做黄页网站推广app免费下载
  • 杨和勒流网站建设中建铁路建设有限公司网站
  • jsp简单的网站开发例子网络设计包括哪些方面