leetcode题型分析《字符串》

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

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

剑指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) 字母大转小

 

 

 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值