# -*- coding: utf-8 -*-
'''
Python程序员面试算法宝典---解题总结: 第5章 字符串 5.12 如何判断一个字符串是否包含重复字符
题目:
判断一个字符串是否包含重复字符。例如: 'good'就包含重复字符'0',
而'abc'就不包含重复字符
分析:
可以用哈希数组,假设字符来自于ASCII码表的256个字符,
那么建立一个哈希数组,凡是出现的次数加1,一旦某个字符
出现次数超过1,即表示重复
关键:
1 书上解法
由于1个int可以有32bit,
可以用一个int整数上某1位bit是否为1来表示这个数是否存在;
可以申请8个int,每个int有32bit,共有8 * 32=256 bit
如果首次出现,就可以先用该整数 与 bit上数字进行或运算
即可
确定一个数字就用
num = ord(string[i])
index = num / 32
shift = num % 32
flags[index] & (1 << shift)
2 没有想到
是因为忘记bit位是否为1可以表示一个数字是否存在
参考:
Python程序员面试算法宝典
'''
def isStringHasRepeatedChar2(string):
if not string:
return False
hashArray = [0 for i in range(256)]
for char in string:
index = ord(char)
hashArray[index] += 1
if hashArray[index] > 1:
return True
return False
def isStringHasRepeatedChar(string):
if not string:
return False
hashArray = [0 for i in range(8)]
for char in string:
index = ord(char) / 32
shift = ord(char) % 32
result = hashArray[index] & (1 << shift)
if result != 0:
return True
hashArray[index] |= (1 << shift)
return False
def process():
string = "good"
result = isStringHasRepeatedChar(string)
print result
string = "abc"
result = isStringHasRepeatedChar(string)
print result
if __name__ == "__main__":
process()
Python程序员面试算法宝典---解题总结: 第5章 字符串 5.12 如何判断一个字符串是否包含重复字符
猜你喜欢
转载自blog.csdn.net/qingyuanluofeng/article/details/94543155
今日推荐
周排行