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

  • 相关阅读:
    【爬坑】在 IDEA 中运行 Hadoop 程序 报 winutils.exe 不存在错误解决方案
    【爬坑】Vim 文档加密 & 解密
    Maven 安装配置
    2014/11/23 条件查询
    2014/11/21
    2014/11/20 SQL简单命令
    2014/11/19 SQL Server基础
    7、数组
    6、循环、跳转、异常语句,string类、math、datetime
    5、循环语句、穷举
  • 原文地址:https://www.cnblogs.com/xautxuqiang/p/5345017.html
Copyright © 2011-2022 走看看