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

门户网站首页模板广州网站建设网站优化推广

门户网站首页模板,广州网站建设网站优化推广,无锡工程建设监察支队网站,angular 做网站Problem: 438. 找到字符串中所有字母异位词 438. 找到字符串中所有字母异位词 预备知识解题思路复杂度Code其它细节推荐博客或题目博客题目滑动窗口哈希表 预备知识 此题用到了双指针算法中的滑动窗口思想,以及哈希表的运用。c中是unordered_map。如果对此不了解的u…

Problem: 438. 找到字符串中所有字母异位词

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

  • 预备知识
  • 解题思路
  • 复杂度
  • Code
  • 其它细节
  • 推荐博客或题目
    • 博客
    • 题目
      • 滑动窗口
      • 哈希表

预备知识

image.png

此题用到了双指针算法中的滑动窗口思想,以及哈希表的运用。c++中是unordered_map。如果对此不了解的uu,建议查看相关介绍博客和更简单的题目!!!

解题思路

该题解法为:滑动窗口 + 哈希表。

  1. 该题的滑动窗口是固定的,我们只需要对每次移动新字符和删除字符进行判断,时间复杂度为O(n)。

  2. 首先,定义一个哈希表,记录要满足匹配p字符串需要多少的对应的字符。

    unordered_map<char, int> pp;
    
  3. 遍历p,出现对应的字符,就在该位置的–,说明还需要在s中找多少该字符。

    while (j < p.size()) {  //O(1) 理论上子字符串的操作应该是1//开始遍历,在s上初始化第一个字符串,能够满足对应字符供给的就++pp[s[j++]]++;
    }
    
  4. 遍历pp,如果不为0,说明该子字符串不满足匹配条件,则跳到x.

    for (auto& [a, b] : pp) {   //O(1) max=26//遍历pp,如果不为0,说明该子字符串不满足匹配条件,则跳到xif (b != 0) goto x;
    }
    
  5. 最后进行全局遍历

    while (j < s.size()) {  //O(n)//开始遍历//对于j位置的字符,将pp对应位置++,表示提供一个字符pp[s[j]]++;//对于i位置的字符,将pp对应位置--,表示不能提供一个字符pp[s[i]]--;for (auto& [a, b] : pp) {   //O(1) max=26if (b != 0) goto xx;}v.push_back(i + 1);xx:;i++;j++;
    }
    

复杂度

时间复杂度:

O(26 * n),26是遍历哈希表中的每种英文字母的个数,最多为26,n是遍历滑动窗口。

空间复杂度:

O(26 + n),26是哈希表最大size,n是vector最大size。

Code

class Solution {
public:vector<int> findAnagrams(string s, string p) {//记录要满足匹配p字符串需要多少的对应的字符unordered_map<char, int> pp;    vector<int> v;int i = 0, j = 0;for (auto a : p) {  //O(n)//遍历p,出现对应的字符,就在该位置的--,说明还需要多少该字符pp[a]--;}while (j < p.size()) {  //O(1) 理论上子字符串的操作应该是1//开始遍历,在s上初始化第一个字符串,能够满足对应字符供给的就++pp[s[j++]]++;}for (auto& [a, b] : pp) {   //调试bug的时候可以用输出的方法cout << a << b << endl;}for (auto& [a, b] : pp) {   //O(1) max=26//遍历pp,如果不为0,说明该子字符串不满足匹配条件,则跳到xif (b != 0) goto x;}v.push_back(i);x:;while (j < s.size()) {  //O(n)//开始遍历//对于j位置的字符,将pp对应位置++,表示提供一个字符pp[s[j]]++;//对于i位置的字符,将pp对应位置--,表示不能提供一个字符pp[s[i]]--;for (auto& [a, b] : pp) {   //O(1) max=26if (b != 0) goto xx;}v.push_back(i + 1);xx:;i++;j++;}return v;}
};

其它细节

可以尝试用输出日志的方式来获得局部代码的正确性。对于比较长的代码,我们应该在写完整个代码之前,已经完成多个地方的日志输出。多加练习能够提高自己写代码的正确性。

for (auto& [a, b] : pp) {   //调试bug的时候可以用输出的方法cout << a << b << endl;
}

推荐博客或题目

博客

  1. 滑动窗口详解
  2. 哈希表理论基础

题目

滑动窗口

  1. 无重复字符的最长子串 难度:++

哈希表

  1. 两数之和 难度:++
  2. 三数之和 难度:+++
  3. 四数之和 难度:++++
  4. 四数相和II 难度:++++
http://www.yayakq.cn/news/320672/

相关文章:

  • 网站优化如何做pc指数品牌营销推广方案怎么做
  • 广东建设部官方网站网站关闭了域名备案
  • 网站做支付功能搜索引擎优化与推广的产生及发展
  • 静态网站策划书展台设计搭建
  • 关于做网站公司周年大促销数据标签wordpress
  • 做游戏攻略网站赚钱吗wordpress 更新 ftp
  • 深圳北网站建设网站建设与维护的题目
  • 学校做好网站建设目的网站域名实名证明
  • 外贸网站营销方案手机网站公司
  • 一个专门做海鲜的网站合肥网站建设方案优化
  • 建设部网站如何下载国标规范设计公司怎么接业务
  • 网站管理后台制作微信小程序在哪里查找
  • 电子商务网站建设信息南阳网站seo
  • 网站推广平台怎么做怎样开网店卖别人的东西
  • 响应式企业网站设计软件外包公司创业
  • 小程序平台推广方案网站制作及排名优化
  • 徐汇建设机械网站展厅设计案例100例
  • 做网站的工作室建筑培训网成绩查询
  • 团员关系没转就作废吗徐州百度搜索优化
  • 建网站选域名广州天河区做网站
  • 大学生兼职网站做pptdede网站seo
  • 网站申请名称和域名注册一个公司大概要多少钱
  • 国内视频培训网站建设济南做网站建设公司
  • 广安网站建设服务徐州网
  • 怎么做好企业网站网页网站公司如何做备份
  • 开源的 二次网站开发昆明网站设计制作公司
  • 男人和女人做性的网站泰安网约车平台有哪些
  • 网站开发教程PDF微盘下载唐山市住房和城乡建设局网站
  • 做编程的网站一个月多少钱深圳建网站哪家好
  • 南京网站建设网贞丰网站建设