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

    原创:

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

  • 相关阅读:
    盘古越狱工具在用户空间的行为
    hdu 5538 House Building(长春现场赛——水题)
    html 锚点定位
    OOP版电子词典
    有趣的JavaScript原生数组函数
    <LeetCode OJ> 121. /122. Best Time to Buy and Sell Stock(I / II)
    hadoop 出现FATAL conf.Configuration: error parsing conf file,异常
    IT痴汉的工作现状10-Sprint Planning
    2015 Astar Contest
    无法使用BIPublisher开发报表
  • 原文地址:https://www.cnblogs.com/xautxuqiang/p/5345017.html
Copyright © 2011-2022 走看看