必须要了解的编程基础--哈希与字符串
哈希粗略理解就是实现key到value的映射。显然,这里面有很多种实现方式, 比如哈希函数+链表、hash map等。
1. 简单题目
1.1 LeetCode 409. 最长回文串1
给定一个包含大写字母和小写字母的字符串,找到通过这些字母构造成的最长的回文串。
在构造过程中,请注意区分大小写。比如 “Aa” 不能当做一个回文字符串。
注意:
假设字符串的长度不会超过 1010。
输入:
"abccccdd"输出:
7解释:
我们可以构造的最长的回文串是"dccaccd", 它的长度是 7。
- 本题属于构造回文字符串。
- 回文字符串和字符数目的奇偶性有关。若全是偶数,则字符总数就是最长回文串的长度。若是有字符的数量为奇数,则可以考虑回文串中心位为奇数个数的字符,而其余位为偶数数目的字符(奇数也可以通过减1变成偶数个数)。
- 因此,需要对字符的个数进行计数,这便利用到了字符哈希的知识。
- 字符哈希的方法统计所有字符的数量;
- 设最长回文串偶数字符长度为max_length = 0;
- 设是否有中心字符标记flag = 0;
- 遍历每一个字符,字符数为count,若count为偶数,则max_length += count; 若count为奇数,max_length += count - 1; flag = 1;
- 最终返回最长回文子串长度 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
其中,*是否出现过,通过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;}
};
简单题目小节
必须要了解的编程基础--哈希与字符串相关推荐
- Python编程基础:第三节 字符串方法String Methods
第三节 字符串方法String Methods 前言 实践 前言 本节我们一起来学习一些常用的字符串方法,包括计算字符串长度,获取某个字母的位置等等. 实践 假设你有一个名为name的变量,且其取值为 ...
- 深度学习笔记第一门课第二周:神经网络的编程基础(上)
本文是吴恩达老师的深度学习课程[1]笔记部分. 作者:黄海广[2] 主要编写人员:黄海广.林兴木(第四所有底稿,第五课第一二周,第三周前三节).祝彦森:(第三课所有底稿).贺志尧(第五课第三周底稿). ...
- 区块链教程(三):Solidity编程基础
注:本教程为技术教程,不谈论且不涉及炒作任何数字货币 区块连教程(一):前置知识-linux补充 区块链教程(二):基础概念介绍 区块链教程(三):Solidity编程基础 区块链教程(四):搭建私链 ...
- java编程英语词汇_Java编程基础常见英语词汇
Java编程基础常见英语词汇 学编程英语基础要好,下面小编整理了Java编程基础常见英语词汇,希望对大家有帮助! OO:object-oriented ,面向对象 OOP: object-orient ...
- 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 ...
- 计算机科学与技术学习路线编程基础四大件应用实践编程(含C++学习路线)
计算机科学与技术学习路线&编程基础四大件&应用实践编程(含C++学习路线) 基本介绍 本人211科班出身,目前大学临近毕业,想给迷茫的同行者或者后来人一些建议和推荐,少走弯路.想想自己 ...
- Scale 编程基础 A(变量声明、基本数据类型、运算符、文件读写、分支与循环、数据结构)
Scala: 变量声明.基本数据类型.运算符.文件读写.分支与循环.数据结构(List/Tuple/Range/Vector/Set/Map)与迭代器 变量声明 val:是不可变的,在声明时就必须被初 ...
- java中的常用名词,Java编程基础常见英语词汇
Java编程基础常见英语词汇 Java编程基础中常见英语的词汇有哪些呢?这些都是学Java编程需要运用到的,下面内容由小编为大家介绍Java编程基础常见英语词汇,供大家参考! Java编程基础常见英语 ...
- java编程的英文_Java编程基础常见英语词汇总编
Java编程基础常见英语词汇总编 以下是百分网小编收集的Java编程基础常见英语词汇,希望对您的学习有所帮助! Java编程基础常见英语词汇 OO:object-oriented ,面向对象 OOP: ...
- 学习算法,你需要掌握这些编程基础(包含JAVA和C++)
前言 小伙伴们好呀!可爱的小编又来了.最近放寒假了,相信各位小伙伴已经做好满满的计划打算在寒假实现弯道超车. 这么美好的一段长假,不用来学习是在是太暴殄天物啦! 加上经常有小伙伴来问小编,学习算法需要 ...
最新文章
- RedHat使用163源
- 2011 ScrumGathering敏捷个人.pptx
- m_Orchestrate learning system---十八、mo项目的启示是什么
- boost::gil::scale_lanczos用法的测试程序
- php++mpdf.mpdf,使用php第三方包mpdf将网页装换成pdf文件【2】
- 面向企业级前端应用的开发框架 UI5 的发展简史介绍
- linux cdc设备驱动程序,Linux Kernel 'cdc-wdm' USB设备驱动程序堆缓冲区溢出漏洞
- Webapi测试工具WebBenchmark v1.3发布
- new URI(zk_servers_1) 路径包含下划线无法获取host的问题
- MapReduce学习笔记(4)
- Qt官网变更【2012】
- php最难,那个PHP中号称最难的‘递归函数’
- js中事件捕获和事件冒泡
- EAGLE转Protel文件
- (十四)ATP应用测试平台——使用docker-compose一键式安装ATP应用测试平台的依赖服务
- java excel 数组公式_教你如何快速学习Excel数组公式及运用
- 关于Android P Auto锁屏Global.DEVICE_PROVISIONED
- 详解通往Web3的护照:去中心化身份DID
- PTA7-4一帮一 结构体解决
- python xlrd pandas_python处理excel方式(openpyxl,xlrd,xlwt,openpyxl,panda)
热门文章
第三节 字符串方法String Methods 前言 实践 前言 本节我们一起来学习一些常用的字符串方法,包括计算字符串长度,获取某个字母的位置等等. 实践 假设你有一个名为name的变量,且其取值为 ...
本文是吴恩达老师的深度学习课程[1]笔记部分. 作者:黄海广[2] 主要编写人员:黄海广.林兴木(第四所有底稿,第五课第一二周,第三周前三节).祝彦森:(第三课所有底稿).贺志尧(第五课第三周底稿). ...
注:本教程为技术教程,不谈论且不涉及炒作任何数字货币 区块连教程(一):前置知识-linux补充 区块链教程(二):基础概念介绍 区块链教程(三):Solidity编程基础 区块链教程(四):搭建私链 ...
Java编程基础常见英语词汇 学编程英语基础要好,下面小编整理了Java编程基础常见英语词汇,希望对大家有帮助! OO:object-oriented ,面向对象 OOP: object-orient ...
章 大数据技术概述 1.1 大数据概念与关键技术 1.1.1 大数据的概念 1.1.2 大数据关键技术 1.2 代表性大数据技术 1.2.1 Hadoop 1.2.2 Spark 1.2.3 Flin ...
计算机科学与技术学习路线&编程基础四大件&应用实践编程(含C++学习路线) 基本介绍 本人211科班出身,目前大学临近毕业,想给迷茫的同行者或者后来人一些建议和推荐,少走弯路.想想自己 ...
Scala: 变量声明.基本数据类型.运算符.文件读写.分支与循环.数据结构(List/Tuple/Range/Vector/Set/Map)与迭代器 变量声明 val:是不可变的,在声明时就必须被初 ...
Java编程基础常见英语词汇 Java编程基础中常见英语的词汇有哪些呢?这些都是学Java编程需要运用到的,下面内容由小编为大家介绍Java编程基础常见英语词汇,供大家参考! Java编程基础常见英语 ...
Java编程基础常见英语词汇总编 以下是百分网小编收集的Java编程基础常见英语词汇,希望对您的学习有所帮助! Java编程基础常见英语词汇 OO:object-oriented ,面向对象 OOP: ...
前言 小伙伴们好呀!可爱的小编又来了.最近放寒假了,相信各位小伙伴已经做好满满的计划打算在寒假实现弯道超车. 这么美好的一段长假,不用来学习是在是太暴殄天物啦! 加上经常有小伙伴来问小编,学习算法需要 ...