【最优解法】
我们假设字母都由大写字母组成……,我们先对小字符串预处理,
可以得到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.没有考虑重复的字符,可以加入判断重复字符的辅助数组。
大整数除法的代码,后续公布下载地址。
时间: 2024-10-29 01:14:50