题目描述:
查找字符串中给定的连续不重复序列
给定如下不重复序列和一个字符串,请返回不重复序列连续出现在字符串中第一个字母的位置。
例如
给定不重复序列[a,b,c,d]
字符串adcebadcb
则返回4
解题思路:
个人以为,此题的解题关键在于如何去判断一个字符在不在给定序列中?如果在的话,重复出现了又该如何处理?
备战面试刷题的经验告诉我,这里可用到一个特殊的哈希表来处理上述两个问题。
我们可以定义一个长度为256的int数组来当作我们的哈希表,长度为什么是256?因为ASCII码!我们可以用字符的ASCII码来直接索引定位到该字符。
下面是我个人的解题思路。首先要把哈希表初始化,把序列中存在的字符全部置1,否则置0。然后开始用一个两层嵌套的while循环,第一层循环用来移动下标,第二层则用来标识当前连续的合法字符个数,当个数等于序列长度并且全部合法时即求得解。
还是要唠叨一下哈希表的使用问题,在第二层循环里,我们用到哈希表来判断字符的合法性,当前字符在哈希表中的值为0则说明该字符不合法。若一个合法字符重复出现的话,我们该怎么处理呢?这里,考虑到序列中不重复,每当我们遇到一个合法字符,我们就把该字符在哈希表中的值改为0,也就是后续再重复出现的话,他就成为了不合法字符。(这种做法会产生一个问题,就是我们更改了哈希表,所以我们要在每次进入第二层循环之前,重新初始化哈希表。)
后续: