哈希粗略理解就是实现key到value的映射。显然,这里面有很多种实现方式, 比如哈希函数+链表、hash map等。

1. 简单题目

1.1 LeetCode 409. 最长回文串1

给定一个包含大写字母和小写字母的字符串,找到通过这些字母构造成的最长的回文串。
在构造过程中,请注意区分大小写。比如 “Aa” 不能当做一个回文字符串。
注意:
假设字符串的长度不会超过 1010。

示例 1:

输入:
"abccccdd"输出:
7解释:
我们可以构造的最长的回文串是"dccaccd", 它的长度是 7。

分析:

  1. 本题属于构造回文字符串。
  2. 回文字符串和字符数目的奇偶性有关。若全是偶数,则字符总数就是最长回文串的长度。若是有字符的数量为奇数,则可以考虑回文串中心位为奇数个数的字符,而其余位为偶数数目的字符(奇数也可以通过减1变成偶数个数)。
  3. 因此,需要对字符的个数进行计数,这便利用到了字符哈希的知识。

算法思路:

  1. 字符哈希的方法统计所有字符的数量;
  2. 设最长回文串偶数字符长度为max_length = 0;
  3. 设是否有中心字符标记flag = 0;
  4. 遍历每一个字符,字符数为count,若count为偶数,则max_length += count; 若count为奇数,max_length += count - 1; flag = 1;
  5. 最终返回最长回文子串长度 max_length + flag;
class Solution {public:int longestPalindrome(string s) {int flag = 0;int max_length = 0;map<char, int> hash;// 字符哈希计数for (auto&c:s) hash[c]++;// 统计回文长度for (auto&e:hash) {if (e.second % 2 == 0) {max_length += e.second;}else {max_length += e.second - 1;flag = 1;}}return max_length + flag;}
};

不使用map容器而是使用ASCII码表(0-127)来进行字符哈希。这种方法的运行速度更快一些。

class Solution {public:int longestPalindrome(string s) {int flag = 0;int max_length = 0;int char_map[128] = {0};// 字符哈希计数for (auto&c:s) {char_map[c]++;}// 统计回文长度for (int i=0; i<128; i++) {if ( char_map[i]% 2 == 0) {max_length += char_map[i];}else {max_length += char_map[i] - 1;flag = 1;}}return max_length + flag;}
};

1.2 LeetCode 290. 单词规律2

枚举例子说明所有不匹配可能情况:

(1) “abba”, “dog cat cat fish”
(2) “aaaa”, “dog cat cat dog”
(3) “abba”, “dog dog dog dog”
(3) “abba”, “dog”

总结不匹配的情况:

“abb*”, “dog cat cat ?”

  1. ?未出现过,*出现过; (1)、(2)
  2. ? 出现过,但是*和之前的不一致
  3. pattern字符数和str的单词数量不一致

其中,*是否出现过,通过used[128]数组来标记,就像是在图的深搜里标记节点有无被访问过那样。

class Solution {public:bool wordPattern(string pattern, string str) {unordered_map<string, char> hash_map;int used[128] = {0};string word = "";// 使得对str可以根据空格来拆分单词;str.push_back(' ');int pos = 0;for (int i=0; i<str.size(); i++) {// 遇到空格拆分单词if (str[i] == ' ') {  // 如果word没有出现在哈希表中if (hash_map.count(word) == 0) {// word未出现过,但是pattern对应字符出现过if (used[pattern[pos]]) return false;hash_map[word] = pattern[pos];used[pattern[pos]] = 1;} else {// word出现过,但是pattern对应字符不一致if (hash_map[word] != pattern[pos]) return false;}pos++;word = "";}else {word += str[i];}}// 两者数量不匹配if (pos != pattern.size()) return false;return true;}
};

简单题目小节

必须要了解的编程基础--哈希与字符串相关推荐

  1. Python编程基础:第三节 字符串方法String Methods

    第三节 字符串方法String Methods 前言 实践 前言 本节我们一起来学习一些常用的字符串方法,包括计算字符串长度,获取某个字母的位置等等. 实践 假设你有一个名为name的变量,且其取值为 ...

  2. 深度学习笔记第一门课第二周:神经网络的编程基础(上)

    本文是吴恩达老师的深度学习课程[1]笔记部分. 作者:黄海广[2] 主要编写人员:黄海广.林兴木(第四所有底稿,第五课第一二周,第三周前三节).祝彦森:(第三课所有底稿).贺志尧(第五课第三周底稿). ...

  3. 区块链教程(三):Solidity编程基础

    注:本教程为技术教程,不谈论且不涉及炒作任何数字货币 区块连教程(一):前置知识-linux补充 区块链教程(二):基础概念介绍 区块链教程(三):Solidity编程基础 区块链教程(四):搭建私链 ...

  4. java编程英语词汇_Java编程基础常见英语词汇

    Java编程基础常见英语词汇 学编程英语基础要好,下面小编整理了Java编程基础常见英语词汇,希望对大家有帮助! OO:object-oriented ,面向对象 OOP: object-orient ...

  5. spark编程基础python版实验报告_Spark编程基础(Python版)

    章 大数据技术概述 1.1 大数据概念与关键技术 1.1.1 大数据的概念 1.1.2 大数据关键技术 1.2 代表性大数据技术 1.2.1 Hadoop 1.2.2 Spark 1.2.3 Flin ...

  6. 计算机科学与技术学习路线编程基础四大件应用实践编程(含C++学习路线)

    计算机科学与技术学习路线&编程基础四大件&应用实践编程(含C++学习路线) 基本介绍 本人211科班出身,目前大学临近毕业,想给迷茫的同行者或者后来人一些建议和推荐,少走弯路.想想自己 ...

  7. Scale 编程基础 A(变量声明、基本数据类型、运算符、文件读写、分支与循环、数据结构)

    Scala: 变量声明.基本数据类型.运算符.文件读写.分支与循环.数据结构(List/Tuple/Range/Vector/Set/Map)与迭代器 变量声明 val:是不可变的,在声明时就必须被初 ...

  8. java中的常用名词,Java编程基础常见英语词汇

    Java编程基础常见英语词汇 Java编程基础中常见英语的词汇有哪些呢?这些都是学Java编程需要运用到的,下面内容由小编为大家介绍Java编程基础常见英语词汇,供大家参考! Java编程基础常见英语 ...

  9. java编程的英文_Java编程基础常见英语词汇总编

    Java编程基础常见英语词汇总编 以下是百分网小编收集的Java编程基础常见英语词汇,希望对您的学习有所帮助! Java编程基础常见英语词汇 OO:object-oriented ,面向对象 OOP: ...

  10. 学习算法,你需要掌握这些编程基础(包含JAVA和C++)

    前言 小伙伴们好呀!可爱的小编又来了.最近放寒假了,相信各位小伙伴已经做好满满的计划打算在寒假实现弯道超车. 这么美好的一段长假,不用来学习是在是太暴殄天物啦! 加上经常有小伙伴来问小编,学习算法需要 ...

最新文章

  1. 最强通道注意力来啦!金字塔分割注意力模块,即插即用,效果显著,已开源!...
  2. 快速组建的开发团队要怎么活下来?
  3. 一次线上内存报警的研究
  4. c++ using namespace std; - 海明威 - 博客园
  5. 海量存储系列上--转载,值得一读
  6. scala伴生类和半生对象详解
  7. boost::hana::take_front_c用法的测试程序
  8. WebSocket服务器TransactionID_SiteDetailMap的析构工作
  9. ASP.NET Core应用的7种依赖注入方式
  10. odoo10参考系列--模块清单文件
  11. 大数据之-Hadoop完全分布式_集群文件存储路径说明_完全分布式集群测试---大数据之hadoop工作笔记0038
  12. torch.Tensor.scatter_(dim, index, src, reduce=None)
  13. 完全开源的杀病毒软件ClamAV
  14. windows c语言 socket通信
  15. NeurlPS2021 | 视觉语言导航的课程学习
  16. IEC 60601-2-33:2022 《医疗诊断用磁共振设备基本安全和基本性能的特殊要求》。
  17. 计算机应用结课PPT,计算机应用说课.ppt
  18. Emscripten 单词_人教版高中英语单词表音频(汇总版)
  19. 互联网日报 | 1月30日 星期六 | 苹果单季营收首破1000亿美元;特斯拉连续六个季度盈利;全球新冠肺炎确诊病例超1亿例...
  20. C语言 自定义数据类型(结构体 typedef 共用体 位段 枚举)

热门文章

  1. VMware10虚拟机请选择要安装OS X的磁盘解决方法
  2. Win7任务管理器进程一直在跳动选中不了的处理方法
  3. HZOI20190819模拟26题解
  4. 通过bind实现DNS服务
  5. 程序员才是真正的段子手
  6. TMS320F28335 - eCAP、eQEP
  7. uni-app实现微信与支付宝的境外支付
  8. 批量处理:读取文件夹,将json文件转化为txt文件
  9. python 下载图片 写硬盘 慢_天啦噜!知道硬盘很慢,但没想到比 CPU Cache 慢 10000000 倍...
  10. 阿里云ECS训练营Class6