字节跳动面试--三面算法题复盘

本文复盘了字节跳动面试中的一道算法题,涉及寻找字符串中给定不重复或可重复序列的连续出现位置。通过使用哈希表优化解题策略,实现了在ASCII码范围内判断字符是否属于序列并处理重复情况。题目提供了两种场景,一种是不重复序列,另一种是可能重复的序列。作者分享了其解题思路,并指出代码仍有优化空间。
摘要由CSDN通过智能技术生成

题目描述:

查找字符串中给定的连续不重复序列

给定如下不重复序列和一个字符串,请返回不重复序列连续出现在字符串中第一个字母的位置。
例如
给定不重复序列[a,b,c,d]
字符串adcebadcb
则返回4

解题思路:

个人以为,此题的解题关键在于如何去判断一个字符在不在给定序列中?如果在的话,重复出现了又该如何处理?

备战面试刷题的经验告诉我,这里可用到一个特殊的哈希表来处理上述两个问题。

我们可以定义一个长度为256的int数组来当作我们的哈希表,长度为什么是256?因为ASCII码!我们可以用字符的ASCII码来直接索引定位到该字符。

下面是我个人的解题思路。首先要把哈希表初始化,把序列中存在的字符全部置1,否则置0。然后开始用一个两层嵌套的while循环,第一层循环用来移动下标,第二层则用来标识当前连续的合法字符个数,当个数等于序列长度并且全部合法时即求得解。

还是要唠叨一下哈希表的使用问题,在第二层循环里,我们用到哈希表来判断字符的合法性,当前字符在哈希表中的值为0则说明该字符不合法。若一个合法字符重复出现的话,我们该怎么处理呢?这里,考虑到序列中不重复,每当我们遇到一个合法字符,我们就把该字符在哈希表中的值改为0,也就是后续再重复出现的话,他就成为了不合法字符。(这种做法会产生一个问题,就是我们更改了哈希表,所以我们要在每次进入第二层循环之前,重新初始化哈希表。)

后续:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值