原创:根据题目要求,通过素数的方式判断一个小的字符串是否属于另一个大的字符串的子集

原创:

  问题地址: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

 

posted @ 2016-04-01 15:07  小黄人python  阅读(1036)  评论(3编辑  收藏  举报