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

  • 相关阅读:
    另类去除标记<font face="宋体"></font>的方法
    ServerVariables 说明
    ServerVariables变量列表
    【转】MyBatis的foreach语句详解
    【转载】适合儿童上手的八款编程工具
    【转载】winfrom里的datagridview里添加单选按钮
    【转】C#中HttpWebRequest的GetRequestStream执行的效率太低,甚至偶尔死掉
    Eclipse快捷键大全(转载)
    【转】关于Integer大小比较的问题
    【转载】HttpWebRequest的GetResponse或GetRequestStream偶尔超时 + 总结各种超时死掉的可能和相应的解决办法
  • 原文地址:https://www.cnblogs.com/xautxuqiang/p/5345017.html
Copyright © 2011-2022 走看看