哈希粗略理解就是实现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. RedHat使用163源
  2. 2011 ScrumGathering敏捷个人.pptx
  3. m_Orchestrate learning system---十八、mo项目的启示是什么
  4. boost::gil::scale_lanczos用法的测试程序
  5. php++mpdf.mpdf,使用php第三方包mpdf将网页装换成pdf文件【2】
  6. 面向企业级前端应用的开发框架 UI5 的发展简史介绍
  7. linux cdc设备驱动程序,Linux Kernel 'cdc-wdm' USB设备驱动程序堆缓冲区溢出漏洞
  8. Webapi测试工具WebBenchmark v1.3发布
  9. new URI(zk_servers_1) 路径包含下划线无法获取host的问题
  10. MapReduce学习笔记(4)
  11. Qt官网变更【2012】
  12. php最难,那个PHP中号称最难的‘递归函数’
  13. js中事件捕获和事件冒泡
  14. EAGLE转Protel文件
  15. (十四)ATP应用测试平台——使用docker-compose一键式安装ATP应用测试平台的依赖服务
  16. java excel 数组公式_教你如何快速学习Excel数组公式及运用
  17. 关于Android P Auto锁屏Global.DEVICE_PROVISIONED
  18. 详解通往Web3的护照:去中心化身份DID
  19. PTA7-4一帮一 结构体解决
  20. python xlrd pandas_python处理excel方式(openpyxl,xlrd,xlwt,openpyxl,panda)

热门文章

  1. 超火的微信小说小程序源码-自带采集带安装教程
  2. mysql straight join_在MySQL中使用STRAIGHT_JOIN的教程
  3. 洛谷 P2689 东南西北
  4. RDLC报表中使用自定义函数
  5. 数学基础知识02——旋转轴、旋转角度和旋转矩阵
  6. Python Matplotlib设置坐标轴范围,以及旋转轴标签(xtickslabels)
  7. 未来十年,流程管理发展的趋势和挑战
  8. 极客也可以很亲民,酷炫设计、多变造型的华为智能眼镜即将发布
  9. js神秘的电报密码---哈弗曼编码
  10. LDU训练赛:小srf的游戏 单调队列 + DP