判断字符串或数组重复的字符或数字
剑指offer
方法1:创建一个用数组实现的简单哈希表,数组索引为字符ASCII码或数字本身,长度分别为255和数字最大值。
方法2:位运算
面试题3:
题目一:找出数组中重复的数字。在一个长度为n的数组里的所有数字都在 0 到 n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。例如,如果输入长度为7的数组{2,3,1,0,2,5,3},那么对应的输出是重复的数字 2 或 3。
(在原数组上进行调整可以实现空间复杂度为O(1))
题目二:不修改数组找出任意一个重复的数字。在一个长度为n+1的数组里的所有数字都在1~n的范围内,所以数组中至少有一个数字是重复的。请找出数组中任意一个重复的数字,但是不能修改输入的数组。例如,如果输入长度为8的数组{2,3,5,4,3,2,6,7},那么对应的输出是重复的数字2或3,只有一个。
面试题50:
题目一:字符串中第一个只出现一次的字符。如输入“abaccdeff”,则输出“b”。
题目二:定义一个函数,输入两个字符串,从第一个字符串中删除在第二个字符串中出现过的所有字符。
题目三:定义一个函数,删除字符串中所有重复出现的字符。
题目四:定义一个函数,判断输入的两个字符串是不是互为变位词,其中互为变位词定义为:在英语中,如果两个单词中出现的字母相同,并且每个字母出现的次数也相同,则两个单词互为变位词。
题目五:字符流中第一个只出现一次的字符。例如,当从字符流中只读出前两个字符“go”时,第一个只出现一次的字符是‘g’。当从该字符流中读出前六个字符“google”时,第一个只出现1次的字符是”l”。
面试题56:位运算
题目一:数组中只出现一次的两个数字[3]。
题目二:在一个数组中除了一个数字值出现一次之外,其他的数字都出现三次。请找出这个数字。
题目三:1-1000放在含有1001个元素的数组中,只有唯一的一个元素值重复,其它均只出现一次。每个数组元素只能访问一次,设计一个算法,将它找出来;不用辅助存储空间,能否设计一个算法实现?
题目四:一个数组中只有一个数字出现了一次,其他的全部出现了两次,求出这个数字。
参考文献
[1] 面试题:异或去重
[2] 求重复数算法思路
[3] 面试题:找出数组中只出现一次的2个数(异或的巧妙应用)(出现3次)