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

Wordpress网站防止采集建筑网官网道辉工程建设有限公司

Wordpress网站防止采集,建筑网官网道辉工程建设有限公司,菏泽网站建设菏泽众皓,网站建设的技术风险76. 最小覆盖子串 给你一个字符串 s s s、一个字符串 t t t。返回 s s s 中涵盖 t t t 所有字符的最小子串。如果 s s s 中不存在涵盖 t t t 所有字符的子串#xff0c;则返回空字符串 ‘ ‘ \quad ‘‘ 。 注意#xff1a; 对于 t t t 中重复…76. 最小覆盖子串 给你一个字符串 s s s、一个字符串 t t t。返回 s s s 中涵盖 t t t 所有字符的最小子串。如果 s s s 中不存在涵盖 t t t 所有字符的子串则返回空字符串 ‘ ‘ \quad ‘‘ 。 注意 对于 t t t 中重复字符我们寻找的子字符串中该字符数量必须不少于 t t t 中该字符数量如果 s s s 中存在这样的子串我们保证它是唯一的答案。 示例 1 输入s ADOBECODEBANC, t ABC 输出BANC 解释最小覆盖子串 BANC 包含来自字符串 t 的 A、B 和 C。示例 2 输入s a, t a 输出a 解释整个字符串 s 是最小覆盖子串。示例 3: 输入: s a, t aa 输出: 解释: t 中两个字符 a 均应包含在 s 的子串中 因此没有符合条件的子字符串返回空字符串。个人解题思路 我们可以利用“滑动窗口”的思想来解决这个问题。 具体步骤如下 初始化 创建一个字典 remaining_target记录字符串 t 中每个字符的出现次数。定义两个指针 index 和 temp_index表示当前窗口的左右边界。定义变量 current_substring用于记录当前窗口的子串。定义变量 min_substring用于记录最小子串。定义变量 min_substring_length用于记录最小子串的长度。定义布尔变量 found_all_chars表示是否已找到目标字符串的所有字符。 遍历字符串 代码首先初始化了目标字符串 t 的临时变量 remaining_target并设置了变量来记录当前子串和最小子串。接着代码遍历源字符串 s对每个字符进行判断它是否在 remaining_target 中。如果在则表示找到了目标字符串中的一个字符remaining_target 中对应字符的数量减一。当在s 中找到第一个 t 的元素时代码记录下当前的索引 temp_index以备后续滑动index使用。 在遍历过程中代码不断更新当前子串 current_substring并在满足条件时更新最小子串 min_substring。当 remaining_target 的长度为零时说明当前窗口已经包含了目标字符串的所有字符代码会通过调整索引来优化子串的长度。最终代码返回找到的最小子串。 python代码 class Solution:def minWindow(self, s: str, t: str) - str:# 初始化目标字符串的副本remaining_target t# 初始化当前子串和最小子串current_substring min_substring min_substring_length len(s)# 标记是否已找到目标字符串的所有字符found_all_chars Falseindex 0# 如果源字符串的长度小于目标字符串直接返回空字符串if len(s) len(t):return # 遍历源字符串while index len(s):current_char s[index]index 1# 如果当前字符在目标字符串中if current_char in remaining_target:found_all_chars True# 删除目标字符串中对应的字符remaining_target remaining_target.replace(current_char, , 1)# 如果目标字符串中剩余字符的长度为目标字符串长度减一记录当前索引if len(remaining_target) len(t) - 1:temp_index index# 如果已找到目标字符串的所有字符if found_all_chars:current_substring current_char # 将当前字符添加到当前子串# 如果目标字符串的所有字符都已找到且当前子串长度小于最小子串长度if len(remaining_target) 0 and len(current_substring) min_substring_length:min_substring current_substringmin_substring_length len(min_substring)# 如果目标字符串的所有字符都已找到if len(remaining_target) 0:index temp_indexremaining_target tfound_all_chars Falsecurrent_substring return min_substring 时间复杂度 时间复杂度 O ( n ) O(n) O(n) 其中 n 是字符串 s s s 的长度。 由于每个字符最多被指针 index 访问一次因此时间复杂度为 O ( n ) O(n) O(n)。空间复杂度 O ( k ) O(k) O(k) 其中 k 是字符集 t t t 的大小。 需要额外的空间来存储字符串 remaining_target 和 current_substring其大小与字符集的大小成正比。 结果 python3的代码在用例165/168处提示超时因此我用deepseek将代码转成了C的形式提交了。以下是C的提交结果和代码C的代码我没有检查 #include string #include unordered_map #include algorithmclass Solution { public:std::string minWindow(std::string s, std::string t) {// 统计 t 中每个字符的出现次数std::unordered_mapchar, int t_count;for (char c : t) {t_count[c];}// 记录当前窗口内每个字符的出现次数std::unordered_mapchar, int window_count;int required t_count.size(); // 需要匹配的字符种类数int formed 0; // 当前窗口内已匹配的字符种类数int left 0, right 0; // 滑动窗口的左右指针int min_len s.size() 1; // 最小窗口的长度int min_left 0; // 最小窗口的左指针while (right s.size()) {// 扩展窗口char c s[right];window_count[c];if (t_count.find(c) ! t_count.end() window_count[c] t_count[c]) {formed;}// 收缩窗口while (left right formed required) {c s[left];if (right - left 1 min_len) {min_len right - left 1;min_left left;}window_count[c]--;if (t_count.find(c) ! t_count.end() window_count[c] t_count[c]) {formed--;}left;}right;}return min_len s.size() 1 ? : s.substr(min_left, min_len);} }; 官方解题思路 其核心思想也是使用滑动窗口的思想结合哈希表来找到字符串 s s s 中包含字符串 t t t 所有字符的最小子串。 初始化 使用 unordered_map ori 来记录目标字符串 t 中每个字符的出现次数。定义两个指针 l 和 r分别表示当前窗口的左边界和右边界。定义变量 len 来记录当前找到的最小子串的长度ansL 和 ansR 分别记录最小子串的起始和结束位置。 遍历字符串 首先右指针 r 向右移动扩展窗口直到窗口包含目标字符串 t 中的所有字符。每次右指针移动时更新当前窗口中字符的计数。当窗口包含了 t 中所有字符时尝试通过移动左指针 l 来收缩窗口寻找更小的覆盖子串。每次收缩时更新当前窗口中字符的计数。在每次收缩窗口时检查当前窗口的大小是否小于之前记录的最小子串长度。如果是则更新最小子串的起始和结束位置。遍历完成后返回从 ansL 到 ansR 的子串。如果未找到符合条件的子串则返回空字符串。 class Solution { public:unordered_map char, int ori, cnt;bool check() {for (const auto p: ori) {if (cnt[p.first] p.second) {return false;}}return true;}string minWindow(string s, string t) {for (const auto c: t) {ori[c];}int l 0, r -1;int len INT_MAX, ansL -1, ansR -1;while (r int(s.size())) {if (ori.find(s[r]) ! ori.end()) {cnt[s[r]];}while (check() l r) {if (r - l 1 len) {len r - l 1;ansL l;}if (ori.find(s[l]) ! ori.end()) {--cnt[s[l]];}l;}}return ansL -1 ? string() : s.substr(ansL, len);} };时间复杂度 时间复杂度 O ( n ) O(n) O(n) 其中 n 是字符串 s 的长度。 由于每个字符最多被指针 l 和 r 各访问一次因此时间复杂度为 O ( n ) O(n) O(n)。空间复杂度 O ( k ) O(k) O(k) 其中 k 是字符集的大小。 需要额外的空间来存储哈希表 ori其大小与字符集的大小成正比。 结果 算法分析 同样的思路我的算法要比官方题解效率更高主要可能有以下两方面的原因 数据结构的选择 官方题解 使用了 unordered_map 来记录字符的出现次数。 我的算法 使用了更高效的数据结构即临时变量和数组。 影响 对于字符集大小固定的情况使用临时变量数组可以减少哈希计算的开销从而提高效率。 字符串操作 官方题解 每次收缩窗口时会频繁地进行字符串截取操作。 我的算法通过记录子串的起始位置和长度避免了多次字符串截取。 影响 减少字符串操作可以降低时间复杂度提升性能。
http://www.w-s-a.com/news/344316/

相关文章:

  • 北京教育云平台网站建设中国服装设计网站
  • 网络公司专业做网站豌豆荚app下载
  • 网站建设属于什么岗位济宁网站建设_云科网络
  • wordpress网站监测fwa 网站 欣赏
  • 用jsp做的可运行的网站推广网络
  • 电商网站设计论文wordpress子文件夹建站
  • 临沂网站优化如何如何做公司的网站建设
  • 建设部网站 光纤到户沈阳网页设计兼职
  • 企业网站建设作用宁波企业网站推广效果好
  • wordpress课件站模板做网站的公司 贵阳
  • 低价格网站建设网站建设中的板块名称
  • 青岛网站建设华夏h5链接是什么意思
  • 贸易公司如何做网站百度做的网站一般在什么后台
  • 东莞网站设计方案广州做服装电商拿货的网站
  • 部队网站建设设计dede个人网站模板
  • 个人网站怎么自己备案重庆怎样网站推广
  • 做电影网站挣钱吗重庆网站建设技术托管
  • 网站建设用户登录网站商业授权含义
  • 接做室内效果图的网站wordpress制作上传图片
  • 维护一个网站一年多少钱网站微信登录怎么做的
  • 中国建设银行网站E路护航官网如何在招聘网站上选个好公司做销售
  • 网站开发质量管理招聘网站建设方案
  • 有没有那个的网站seo编辑的工作内容
  • 平度那里有做网站的昆明建设招聘信息网站
  • 邯郸城乡建设部网站首页唐山市住房城乡建设部网站主页
  • 慕课联盟网站开发实战六安品牌网站建设电话
  • 制作企业网站首页贵州小程序制作开发
  • 什么是网站后台郑州众志seo
  • 做线上交互的网站分销平台
  • 培训机构网站开发江门cms模板建站