Leetcode记录库解题方法篇之一:计数法

Python 爬虫实战:力扣(LeetCode)用户提交记录分析(含解题效率与语言偏好) 力扣(LeetCode) 是一个全球知名的在线编程学习平台,用户可以在这里解决各种编程问题,提升自己的编程能力。通过分析用户的提交记录,可以了解用户的解题效率、语言偏好等信息,这对于个人学习进度的跟踪、教学研究以及团队管理等都有很大的帮助。 阅读详情

简介

六、字符串

结论

一些很主观的东西,归根到底可能还是自己的实力不够:

计数法类似于计数排序以及哈希表的思想,一般用于有关字符的问题中,不使用字符的索引作为某个字符的标志,而是使用字符本身的ASCII码值作为暂存数组的索引。

1 242. 有效的字母异位词

题目

思路描述

  • 使用HashMap的思想
  • 遍历第一个字符串记录每一个字符的出现次数,然后遍历第二个字符串的过程中减少字符的次数,最后查看所有字符的出现次数是不是归零了。
  • 时间复杂度O(n),空间O(1)

代码实现
java代码:

class Solution {
    public boolean isAnagram(String s, String t) {
        int[] ch = new int[26];
        for(int c : s.toCharArray()){
            ch[c - 'a']++;
        }
        for(int c : t.toCharArray()){
            ch[c - 'a']--;
        }
        for(int i : ch){
            if(i != 0) return false;
        }

        return true;
    }
}

注意事项

  1. 注意事项

拓展延伸

  1. 拓展延伸

2 409. 最长回文串

题目

思路描述

  • 没用什么思想
  • 时间复杂度O(n),空间O(1)

代码实现
java代码:

class Solution {
    public int longestPalindrome(String s) {
        int[] ch = new int[58]; // 48 -> 0, 65 -> A, 97 -> a, 122 -> z
        int len = 0;
        for(char c: s.toCharArray()){
            ch[c - 'A']++;
        }

        for(int i: ch){
            if(i % 2 == 0) len += i; // 字符个数是偶数的来者不拒全都要
            if(i % 2 == 1) {
                len += i - 1; // 字符个数为奇数的,减去一变成偶数全都收下
            }
        }
        if(len < s.length()) len++; // 如果最后还小于s的长度时,随便再取一个放到正中间
        
        return len;
    }
}

注意事项

  1. 注意事项

拓展延伸

  1. 拓展延伸

3 205. 同构字符串

题目

思路描述

  • 对于一个字符串我们用它的字符j作为数组索引,然后只记录它上次出现的位置,进行遍历字符串对比。
  • 时间复杂度O(n),空间O(1)

代码实现
java代码:

class Solution {
    public boolean isIsomorphic(String s, String t) {
        int[] sc = new int[256];
        int[] tc = new int[256];

        for(int i = 0; i < s.length(); i++){
            if(sc[s.charAt(i)] == tc[t.charAt(i)]){
                sc[s.charAt(i)] = i + 1;
                tc[t.charAt(i)] = i + 1;
            } else {
                return false;
            }
        }

        return true;
    }
}

注意事项

  1. 注意事项

拓展延伸

  1. 拓展延伸

3 76. 最小覆盖子串

题目

思路描述

  • 双指针,滑动窗口,计数法
  • 时间复杂度O(n),空间复杂度O(1)

代码实现
java代码:

class Solution {
    public String minWindow(String s, String t) {
        // 双指针?滑动窗口
        int sn = s.length(), tn = t.length();
        if (sn < tn) {
            return "";
        }

        int[] charArr = new int[128];
        int cnt = tn; // t中的字母个数
        for (int i = 0; i < tn; i++) {
            charArr[t.charAt(i)]++; // 对应的字母位置计数,计数法
        }

        int l = 0, r = 0, ansL = 0, ansR = 0, min = sn + 1; // min是窗口大小,最初给一个较大的值
        while (r < sn) {
            while (r < sn && cnt != 0) {
                if (charArr[s.charAt(r)] > 0) {
                    cnt--; // 没有被覆盖的字母个数减一
                }
                charArr[s.charAt(r)]--; // 字母计数减一
                r++; // 指针右移,注意在不满足循环条件时 r 已经指向下一个位置了
            }

            if (r == sn && cnt != 0 && min == sn + 1) { // 如果r == sn 了,但是cnt还没有清空,而且也并没有进行过缩减窗口的操作,说明t中有s中没有的字母
                return "";
            }

            while (l < r && cnt == 0) { // 缩减窗口
                if (charArr[s.charAt(l)] < 0) {
                    charArr[s.charAt(l)]++;
                    l++;
                } else {
                    if (min > r - l) { // 记录新的满足要求的窗口大小
                        ansL = l;
                        ansR = r;
                        min = r - l;
                    }
                    charArr[s.charAt(l)]++; // 对应的字母位置重新计数
                    l++;
                    cnt++;
                }
            }
        }

        return s.substring(ansL, ansR);
    }
}

注意事项

  1. 注意事项

拓展延伸

  1. a
力扣刷题实践:C++解题技巧与项目记录 力扣(LeetCode)是一个在线编程平台,为广大程序员提供了海量的编程题目,致力于帮助他们提升算法和编程能力,特别是为那些准备技术面试的人士提供了实用的学习资源。该平台不仅涵盖了从基础到高级的各类算法题,还设计了模拟面试的功能,通过与真实面试相似的题目和环境,让求职者在实战中锻炼自己。此外,力扣还提供了讨论区,让程序员们可以相互交流思路、算法和解决方案,促进了知识的共享与技术的交流。 阅读详情

相关推荐

LeetCode每日解题实战记录

LeetCode是全球知名的在线编程平台,提供了一个广泛的编程练习题库,适合不同水平的开发者使用。本章将为您介绍LeetCode的基本功能、题库结构及如何高效利用该平台进行技能提升。在编程技术的学习过程中,面对难题时的反思与总结是技术成长的关键节点。它不仅要求我们对遇到的问题进行深入思考,更要学会从失败中吸取教训。例如,面对一个算法题目,如果在初次尝试中未能顺利解决,我们应该首先分析自己的解题思路是否有误,代码中是否存在逻辑错误或者效率问题。

weixin_36184718的博客 790

leetcode数组的相对排序--计数排序算法

题目: 计数排序法:以空间提升时间 借助辅助数组来计数,一是记录下数组二的数在数组一中对应出现的次数,即频度;二是记录下数组一除了数组二的数以外其他数按序排序的结果。 遍历数组二,从辅助数组对应下标下取出对应频度个数字加入结果数组,完成这一遍遍历后,顺序输出辅助数组的非0值对应的下标,即完成排序。 代码分析 小tips:新建辅助数组时,题目提示arr2.length <= 1000,但是不用建1001个数组空间,我们可以遍历数组1得出其最大值,新建(upper+1)个即可

baidu_37588698的博客 287

树莓派5安装ROS1避坑指南:从系统配置到cmake报错全解决

本文详细介绍了在树莓派5上安装ROS1的完整流程,包括系统配置、环境变量设置、cmake报错解决等关键步骤。针对树莓派5的ARM架构特性,提供了从基础安装到高级调试的系统级解决方案,帮助开发者高效部署ROS1并避免常见编译陷阱。特别针对cmake报错问题,给出了深度解析和实用修复方法。

spark7igniter的博客 233

LeetCode 算法基础之计数法(C++)

LeetCode 算法基础之计数法(C++)目录1748.唯一元素的和题目描述原题链接思路点拨源码解析387.字符串中第一个唯一字符题目描述原题链接思路点拨源码解析1941.检测是否所有字符出现的次数相同题目描述原题链接思路点拨源码解析448.找到所有数组中消失的数字题目描述原题链接思路点拨源码解析1512.好数对的数目题目描述原题链接思路点拨源码解析 目录 1748.唯一元素的和 题目描述 原题链接 唯一元素的和 思路点拨 nums数组中每个元素的值都在[1,100]中,因此我们可以创建一个大小为10

qq_52324409的博客 844

Allegro网表导入报错VOIDs not allowed in parent SHAPE的解决方案

在PCB设计流程中,网表导入是确保电气连接正确传递的关键步骤。其原理是将原理图的逻辑连接关系映射到物理版图的图形数据库中。这一过程的技术价值在于保证设计数据的一致性,避免后续生产中出现电气错误。然而,在Cadence Allegro等EDA工具的实际应用中,数据库内部状态的不一致可能引发操作失败,例如常见的“VOIDs are not allowed in the parent SHAPE”报错。这类问题通常源于多人协作、跨版本操作或频繁编辑后积累的数据结构冗余。针对此场景,核心的解决方法是执行Databa

weixin_30954817的博客 321

基于STM32F1XX 、HAL库的BH1745NUC-E2环境光传感器驱动应用C语言程序设计

printf("BH1745制造商ID: 0x%02X\r\n", BH1745_ReadManufacturerID(&hbh1745));#define BH1745_ADDR_HIGH 0x39 // ADDR引脚接VDD。#define BH1745_ADDR_LOW 0x38 // ADDR引脚接地。= 0xE0) // BH1745制造商ID为0xE0。// 清除RGBC测量使能位。printf("BH1745初始化失败\r\n");

PP_Cottage的博客 280

LeetCode 1067. 范围内的数字计数

文章目录1. 题目2. 解题 1. 题目 给定一个在 0 到 9 之间的整数 d,和两个正整数 low 和 high 分别作为上下界。 返回 d 在 low 和 high 之间的整数中出现的次数,包括边界 low 和 high。 示例 1: 输入:d = 1, low = 1, high = 13 输出:6 解释: 数字 d=1 在 1,10,11,12,13 中出现 6 次。 注意 d=1 在数字 11 中出现两次。 示例 2: 输入:d = 3, low = 100, high = 250 输出:3

Michael是个半路程序员 1544

DDR5 JEDEC标准简析:一次读懂DDR5的核心规范!

JEDEC,全称是,中文名称是「电子元件工程联合委员会」,它是全球权威的存储接口标准制定机构。我们常见的 DDR2、DDR3、DDR4、DDR5 都是它搞出来的。📌 JEDEC 就像存储接口界的“裁判+编剧”——规定谁该怎么跑,怎么演,怎么配合。

weixin_43199439的博客 2571

leetCode (1,计数型题目)

遇到以上字眼,不用多项先弄个map对象再说 1. /** * 1. 给定一个整数数组,判断是否存在重复元素。 如果存在一值在数组中出现至少两次,函数返回 true 。如果数组中每个元素都不相同,则返回 false 。 * 示例 1: 输入: [1,2,3,1] 输出: true 示例 2: 输入: [1,2,3,4] 输出: false */ const containsDuplicate = functio

车联网开发的博客 206

Unreal Engine开发:多人联机与网络同步_延迟补偿与预测

通过延迟补偿和预测技术,我们可以显著减少网络延迟对多人在线动作游戏的影响,提升玩家的体验。延迟补偿主要在服务器端实现,通过回溯时间点来更准确地处理输入和事件。预测技术主要在客户端实现,通过预先计算玩家的动作结果来减少延迟感。结合这两种技术,可以实现更平滑、更公平的多人游戏体验。

chenlz2007的博客 1191

openbmc mctp i3c适配步骤

本文介绍了在Intel OKS平台下,BMC作为I3C从设备如何适配MCTP over I3C的实现方法。主要内容包括:1)关键术语解释,如MDB(Mandatory Data Byte)值为0xAE,DCR(Device Characteristics Register)和BCR(Bus Characteristics Register)的设置;2)适配流程说明,包括BMC作为控制器主节点分配地址后成为MCTP端点,CPU作为总线所有者的角色转换;3)测试验证步骤,展示通过mctp-client工具发送指

wit_yuan的专栏 132

Leetcode(1684)--统计一致字符串的数目

文章目录题目题解(Java) 题目 1684.统计一致字符串的数目 给你一个由不同字符组成的字符串 allowed 和一个字符串数组 words 。如果一个字符串的每一个字符都在 allowed 中,就称这个字符串是 一致字符串 。 请你返回 words 数组中 一致字符串 的数目。 示例 1: 输入:allowed = "ab", words = ["ad","bd","aaab","baa","badab"] 输出:2 解释:字符串 "aaab" 和 "baa" 都是一致字符串,因为它们只包含字符 'a

叶卡捷琳堡的博客 352

用 PERFORM ... ON COMMIT / ON ROLLBACK 把收尾工作做干净:从 SAP LUW 到 Update Task 的事务钩子实践

ABAP事务钩子机制解析 本文深入探讨SAP ABAP开发中的事务边界管理问题,重点分析PERFORM ... ON COMMIT/ROLLBACK机制: 事务分层:区分Database LUW(数据库提交)和SAP LUW(业务逻辑单元),后者通过COMMIT WORK触发多种收尾动作 钩子机制:PERFORM...ON COMMIT将子程序注册为事务结束回调,在提交/回滚时执行清理工作而非业务更新 执行顺序:钩子程序先于Update Task执行,仍保留当前会话内存上下文 现代实践:建议将FORM仅作为

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 3993

LeetCode解题汇总目录

此篇为学习完《数据结构与算法之美》后,在LeetCode刷题的汇总目录,方便大家查找(Ctrl+Find),一起刷题,一起PK交流!如果本文对你有帮助,可以给我点赞加油! Updated on 2022.6.12刷题可以按照不同的专题进行,便于加强某个知识点的理解。另有《剑指Offer》面试题(更新完毕)、《程序员面试金典》面试题(更新完毕)、LintCode代码能力测试CAT。LeetCode MySQL 数据库解题目录点击访问 我的 LeetCode 主页我的 GitHub 主页注:本文超过字数限制,

Michael是个半路程序员 8万+

【TC3xx芯片】TC3xx芯片UCB详解

TC3xx芯片UCB详解

qq_36056498的博客 1万+

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

力扣(leetcode)题目总结——动态规划篇

本系列文章初衷是为了按类别整理出力扣(leetcode)最经典题目,一共100多道题,每道题都给出了非常详细的解题思路、算法步骤、代码实现。因为力扣题目顺序是随机的,并没有按照算法分类,导致同一类型的算法强化训练不够。所以本系列文章就是来帮你完成算法分类,针对每种算法做强化训练,保证让你以后遇到题目直接秒杀。本篇文章主要是针对动态规划相关的算法题,一次性帮你搞定所有动态规划题!

weixin_46571171的博客 3066

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

Leetcode力扣解题记录--第49题(map)

题目描述:给你一个字符串数组,请你将 字母异位词 组合在一起。可以按任意顺序返回结果列表。

qq_44846784的博客 1101

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

Leetcode记录库解题方法篇之二:双指针

Leetcode记录库数据结构篇之七:双指针简介七、双指针结论1 300. 最长递增子序列 简介 七、双指针 结论 一些很主观的东西,归根到底可能还是自己的实力不够: 1 300. 最长递增子序列 题目 思路描述 记忆化搜索 代码实现 java代码: 思路描述 注意事项 注意事项 拓展延伸 拓展延伸 ...

NotLency的博客 244

力扣(leetcode)题目总结——字符串篇

本系列文章初衷是为了按类别整理出力扣(leetcode)最经典题目,一共100多道题,每道题都给出了非常详细的解题思路、算法步骤、代码实现。因为力扣题目顺序是随机的,并没有按照算法分类,导致同一类型的算法强化训练不够。所以本系列文章就是来帮你完成算法分类,针对每种算法做强化训练,保证让你以后遇到题目直接秒杀。本篇文章主要是针对字符串相关的算法题,一次性帮你搞定所有字符串题!

weixin_46571171的博客 4780

掌握这15种模式后,力扣(LeetCode)不再难

在掌握这15种模式之前,力扣(LeetCode)对我来说一直很难。

硅基创想家的博客 4313

力扣刷题篇——字符串

力扣刷题篇——字符串

weixin_59796310的博客 1070

Leetcode力扣解题记录--第238题(前/后缀积)

本题要求在O(n)时间且不使用除法的情况下,计算数组中每个元素除自身外的乘积。解决方案采用前缀积和后缀积相乘的方法:首先从左到右计算每个元素左侧的乘积存入answer数组,然后从右到左计算右侧乘积并乘以前缀积。通过两次遍历即可得到结果,满足时间复杂度要求且空间复杂度为O(1)(不包括返回数组)。示例表明该方法能正确处理包含0的数组。

qq_44846784的博客 1373

LeetCode使用简介(leetcode中国-力扣)

没有入过英文版官网的坑,现在中文版官网也出来许久并且已经比较完善,题库也是通的,现在就直接使用LeetCode中国。 经过测试,到2019.11账号还是不通的,使用在中文版注册的账号密码是无法登陆英文版的,都绑定并使用github登录得到的不同的账号。能查到的18年的关于leetcode账号数据同步到leetcode中国的帖子,因为18年leetcode中国才刚刚出现还有很多不完善的地方,不太好使...

Sophia_fez的博客 1万+

【PythonCode】力扣Leetcode26~30题Python版

力扣26-30

weixin_43790276的博客 2015

leetcode解题记录-每日一题

一层循环,从头开始遍历,若当前数字为0,则将该数字和后面两个数字反转;若为1,则跳过。最后要判断结尾的两个数组是否为1。

随缘不强求,反正也求不来 1260

【PythonCode】力扣Leetcode6~10题Python版

Leetcode6-10

weixin_43790276的博客 1859
上一篇: Leetcode记录库数据结构篇之四:哈希表
下一篇: 十大排序算法总结
LencyGe
博客等级 码龄7年 26粉丝 17原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值