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

西宁网站设计公司免费下载软件全免费

西宁网站设计公司,免费下载软件全免费,wordpress招商模板,成都有做网站的公司吗题目链接 力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台 题目解析 该题目的意思简而言之就是说,从s字符串中寻找与p字符串含有相同字符(次数和种类均相同)的子串,并且将他们的首字符下标集合进数组中进行返回。 滑动窗口解…

题目链接

力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台

题目解析

该题目的意思简而言之就是说,从s字符串中寻找与p字符串含有相同字符(次数和种类均相同)的子串,并且将他们的首字符下标集合进数组中进行返回。

滑动窗口解法(未优化版本)

分析完该题目可以发现,该题是一个大小不变的滑动窗口题目。窗口大小一直为p字符串的大小,并且我们出窗口和进窗口的大小是相同的,就相当于我们拿着一个窗口在s字符串上去滑动,直到我们找到合适的子串。

如以下动图所示:

 代码如下(含详细注释)

// 该题是一个大小固定的滑动窗口题目
class Solution 
{
public:// 设计一个函数来检查两个哈希表是否相等bool check_hash(int hash1[],int hash2[]){for(int i=0;i<26;i++)if(hash1[i]!=hash2[i]) return false;return true;}vector<int> findAnagrams(string s, string p) {int p_hash[26]={0};int s_hash[26]={0};int ns=s.size();int np=p.size();// 将p字符串中的字符插入到p_hash中for(auto&e:p) p_hash[e-'a']++;vector<int> ret;for(int left=0,right=0;right<ns;right++){// 直接将right对应位置字符进行入哈希表char in=s[right];s_hash[in-'a']++;// 如果right-left+1>np说明已经超过我们滑动窗口的大小了if(right-left+1>np){// 直接从左边进行出窗口char out=s[left++];s_hash[out-'a']--;}// 检查是否符合条件(两个哈希表是否相等)if(check_hash(s_hash,p_hash))// 相等就把该字符串最左边字符的下标入ret数组中ret.push_back(left);}return ret;}
};

滑动窗口(优化版本)

该题只存放了小写字母,因此我们检查两个哈希表其实时间复杂度是非常低的,倘若存入的不止是小写字母,那么我们检查的这一步操作时间复杂度就会非常高,并且检查的这一步操作每一次滑动的时候我们都要进行检测,因此我们可以使用一个count来记录s_hash哈希表中有效字符(存在的字符是p_hash中的字符)的数量,进窗口的时候我们将count++,出窗口的时候我们将count--。

代码如下(含详细注释)

// 优化版本
// 该题是一个大小固定的滑动窗口题目
class Solution 
{
public:vector<int> findAnagrams(string s, string p) {int p_hash[26]={0};int s_hash[26]={0};int ns=s.size();int np=p.size();// 将p字符串中的字符插入到p_hash中for(auto&e:p) p_hash[e-'a']++;vector<int> ret;for(int left=0,right=0,count=0;right<ns;right++){char in=s[right];// 当前字符插入s_hash之后// 如果s_hash中该字符对应的次数<=p_hash[in-'a']// 说明若不是该字符次数在s_hash中的次数与p_hash中的次数一样// 那就是插入之后还比p_hash中的次数少// 无论哪种情况均能说明该字符存在于p_hash中 符合我们要找的字符// 因此count++ 也就是统计的是s_hash中的有效字符数量if(++s_hash[in-'a']<=p_hash[in-'a']) count++;// 如果right-left+1>np说明已经超过我们滑动窗口的大小了if(right-left+1>np){char out=s[left++];// 这一步同理上一步 // 当我们将该字符移除之前该字符次数在s_hash中小于p_hash// 说明该字符是有效字符// 就算该字符不是我们要的有效字符 仍然可以出窗口 只不过count不进行--操作罢了if(s_hash[out-'a']--<=p_hash[out-'a']) count--;}// 如果此时count==np说明当前情况完全满足我们的要求 加入该结果即可if(count==np)ret.push_back(left);}return ret;}
};

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

相关文章:

  • 国家高新技术企业有效期几年百度手机端排名如何优化
  • 浙江省龙泉市建设局网站项目管理软件模块
  • 兴远建设网站庆阳网络营销
  • 网站优化的好处山东监理工程师考试最新消息
  • 电子商务企业网站的基本功能成都php网站建设
  • 公司在选择网站时应考虑什么问题杭州萧山网站开发
  • 网站备案后经营如何做提卡网站
  • 丰台网站建设淘宝网页版看直播
  • 怎样用dw做 网站首页御名是什么意思
  • 如何查看网站域名温州做网站哪里好
  • 怎么利用云盘建设网站外网设计灵感网站
  • 网站怎么做分时虚拟主机wordpress多站点
  • 找个做网站的浙江中联建设集团有限公司网站
  • 北京工商注册公司太原seo网站排名
  • 给个做的网站澄迈网站新闻建设
  • 服装公司网站建设开题报告网站建设如何敲图标代码
  • 做物流网站有哪些功能wordpress 4.9下载
  • 专门网站建设天津专业网站设计报价
  • 网站排版工具城乡建设厅建设网站
  • 网站建设管理教程营销型网站制作哪个好薇
  • 计算机上网题的模拟网站怎么做合肥建设管理学院网站
  • 做网站如何推广买量wordpress 4.5.3 下载
  • 做网站端口内容无法替换山东最新消息今天
  • 自考都到哪个网站找题做装饰公司简介
  • 免费手机网站百度认证服务平台
  • 采集数据做网站如何做品牌营销
  • 魔客吧是什麼程序做的网站淘客网站如何做
  • 坪山网站建设代理商wordpress怎么使用七牛云
  • 广州城乡建设部网站首页网站是否wordpress
  • 网站建设公司专业网站费用报价郑州无痛人流哪家医院好