leetcode题型分析《字符串》

本文介绍了哈希表和双指针在解决字符串问题中的常见应用场景,如判断变位词、寻找不含重复字符的最长子字符串和验证回文。通过哈希表统计字符出现次数,双指针遍历实现高效解决方案。同时,列举了C++中判断字符类型的内置函数。
摘要由CSDN通过智能技术生成

题型一般都与统计字符出现次数有关系,常用哈希表存储每个元素出现的次数,然后加双指针遍历。

剑指offer II 14 字符串中的变位词

变位词指个单词的字母和出现次数相同,只是出现顺序不同。

step 1用数组模拟哈希表,数组下标0对应字母a,下标25对应字母z;

step 2 首先扫描字符串s1,对应哈希表值也++,然后扫描字符串s2,对应哈希表得值--;如果哈希表所有的值都为0,就是变位词。

step 3 判断长度为n的s2子串是不是s1的变位词,扫描字符串中的每一个字母,把该字母在哈希表中的位置减1,如果哈希表所有位置为0,则表示是变位词。

(先加加减减,再减减加加)

9c080177362144018c3b8a5d31dbc352.jpg

剑指offer II 不含重复字符的最长子字符串

解题思路:用一个哈希表key存放字符,值存放字符出现的次数,当value大于2时表示有重复字符出现。用一个双指针,当没有重复字符出现时,右边就++,当有重复字符出现左边就++。右边索引值-左边索引值的最大值即为问题的解。

step 1:定义一个长度为256的数组模拟哈希表,初始化longest,countDup;

step 2:在for循环不断往前走,当有重复字符出现,countDup++;

step 3:在下面while循环中,将重复字符跳过。

3abe5211795741dd8b15960a3f24a409.jpg

 剑指offer II 18 有效的回文

回文:不管从前往后读,还是从后往前读得到的结果都是一样的。

思路:判断一串字符是不是回文用双指针,一个从左往右遍历,一个从右往左遍历,判断两个词是否相等,直到相遇。

step 1:定义i,j分别指向第一个字符和最后一个字符。

step 2:遍历,先判断是否为字符或数字,不是字符数字直接跳过,是的话比较是否相等。

1cc3cef352694941a62de1b9e12b45e4.jpg

 cpp几个判断字符的内置函数:

记一笔 c++的几个内置函数:
islower(char c) 是否为小写字母
isupper(char c) 是否为大写字母
isdigit(char c) 是否为数字
isalpha(char c) 是否为字母
isalnum(char c) 是否为字母或者数字
toupper(char c) 字母小转大
tolower(char c) 字母大转小

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值