原创:
问题地址:http://blog.jobbole.com/99205/
按文章里的要求用素数的方法实现
===========================================================
假设这有一个各种字母组成的字符串,假设这还有另外一个字符串,而且这个字符串里的字母数相对少一些。从算法是讲,什么方法能最快的查出所有小字符串里的字母在大字符串里都有?
比如,如果是下面两个字符串:
String 1: ABCDEFGHLMNOPQRS
String 2: DCGSRQPOM
答案是true,所有在string2里的字母string1也都有。如果是下面两个字符串:
String 1: ABCDEFGHLMNOPQRS
String 2: DCGSRQPOZ
答案是false,因为第二个字符串里的Z字母不在第一个字符串里。
===========================================================
个人答案,写的一般吧,但问题是可以解决的。
# 定义字典格式(字母-->素数)
dict ={'A':2,'B':3,'C':5,'D':7,'E':11,
'F':13,'G':17,'H':19,'I':23,'J':29,
'K':31,'L':37,'M':41,'N':43,'O':47,
'P':53,'Q':59,'R':61,'S':67,'T':71,
'U':73,'V':79,'W':83,'X':89,'Y':97,'Z':101}
dict1 = {}
# 字符串1
String1 = "ABCDEFGHLMNOPQRS"
# 字符串2
String2 = "DCGSRQPOMT"
# 初始化素数乘积为1
Product = 1
# 初始化是否为子集判断结果为True
answer = True
# 遍历String1,并将字母对应的素数相乘得到乘积Product
for i in String1:
Product *= dict[i]
# 打印乘积Product
print("The product is ", Product)
for j in String2:
print("||",end = ' ')
if((Product % dict[j]) == 0 ):
print('%s is True. ' % j, end = ' ')
dict1[j] = True
else:
print('%s is False.' % j,end = ' ')
dict1[j] = False
print(dict1)
print('='*100)
print(dict1)
# 将字典dict1中键的结果and起来得到最终答案,如果True,则为子集,否则非子集
for key in dict1.keys():
answer = (dict1[key] and answer)
print("String2 is String1's subclass:",answer)
===================================================================================
结果显示:
The product is 380051339704999132170 || D is True. {'D': True} || C is True. {'C': True, 'D': True} || G is True. {'C': True, 'G': True, 'D': True} || S is True. {'C': True, 'S': True, 'G': True, 'D': True} || R is True. {'C': True, 'S': True, 'G': True, 'R': True, 'D': True} || Q is True. {'S': True, 'C': True, 'R': True, 'Q': True, 'G': True, 'D': True} || P is True. {'S': True, 'C': True, 'R': True, 'Q': True, 'P': True, 'G': True, 'D': True} || O is True. {'S': True, 'O': True, 'C': True, 'R': True, 'Q': True, 'P': True, 'G': True, 'D': True} || M is True. {'S': True, 'O': True, 'M': True, 'C': True, 'R': True, 'Q': True, 'P': True, 'G': True, 'D': True} || T is False. {'S': True, 'O': True, 'M': True, 'C': True, 'R': True, 'Q': True, 'P': True, 'G': True, 'T': False, 'D': True} ======================================================================== {'S': True, 'O': True, 'M': True, 'C': True, 'R': True, 'Q': True, 'P': True, 'G': True, 'T': False, 'D': True} String2 is String1's subclass: False
=============================================================================
2016-04-01 15:06:26