zoukankan      html  css  js  c++  java
  • 第02章:字符串是否包含

    【最优解法】

     

    我们假设字母都由大写字母组成……,我们先对小字符串预处理,

    可以得到B 里包含哪些字符,这里可以用位运算,或者用bool 数组。位运算简

    单些,用一个int 中的26bit 表示其是否在B 中出现即可。

     

    bool AcontainsB(char *A,char *B) {

    int have = 0;

    while (*B) {

    have |= 1 << (*(B++) - 'A'); // 把A..Z 对应为0..26

    }

    while (*A) {

    if ((have & (1 << (*(A++) - 'A'))) == 0) {

    return false;

    }

    }

    return true;

    }

     

     

     

    思路总结如下:

    1.定义最小的26 个素数分别与字符'A'到'Z'对应。

    2.遍历长字符串,求得每个字符对应素数的乘积。

    3.遍历短字符串,判断乘积能否被短字符串中的字符对应的素数整除。

    4.输出结果。

     

    上述程序待改进的地方

    1.只考虑大写字符,如果考虑小写字符和数组的话,素数数组需要更多素数

    2.没有考虑重复的字符,可以加入判断重复字符的辅助数组。

    大整数除法的代码,后续公布下载地址。

  • 相关阅读:
    继承与 接口
    数组
    字符串加密
    类与对象
    java 方法学习
    课堂练习
    第一次课堂任务记录。整形数字相加合输出
    《大道至简》第二章 读后感
    大道至简第二章
    大道至简第一章
  • 原文地址:https://www.cnblogs.com/lsx1993/p/4841568.html
Copyright © 2011-2022 走看看