谷歌算法面试题,数学的威力!
package com.iteye.bolide74.tester;public class Tester {public static void main(String[] args) {int[] prime = { 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47,53, 59, 61, 67, 71, 73, 79, 83, 89, 97, 101, 103 };String strA = "ABCDEFGHIJKLMNO";String strB = "AFGHIJX";int strAlength = strA.length(), strBlength = strB.length();long strA2primes = 1, strB2primes = 1;for (int i = 0; i < strAlength; i++) {strA2primes *= prime[(strA.charAt(i) - 'A')];if (i < strBlength) {strB2primes *= prime[(strB.charAt(i) - 'A')];}}System.out.println(strA2primes % strB2primes == 0);}}
if (i < strBlength) {执行strAlength 次,执行strBlength次就ok了。
用bitmap的话是否更快些呢?
a="ABCDEFGHIJKLMNO"b="AFGHIJX"ra=0for c in a:ra+=2**(ord(c)-65)rb=0for c in b:rb+=2**(ord(c)-65)r = ra|rb==raprint ra="ABCDEFGHIJKLMNO" b="AFGHIJX" ra=0 for c in a: ra|=2**(ord(c)-65) rb=0 for c in b: rb|=2**(ord(c)-65) r = ra|rb==ra print r 10 楼 bolide74 2011-04-13 回各位同学的各种问题:
首先多谢以上几位高手提供的另外几种算法思路!我发出这个博文也就是想表达这么一个意思:不要把算法思维都禁锢在那么几种逻辑方法内,事实上还有其他很多各种奇思妙想的更有趣的算法,就比如这个用数学特性来解题的算法。
如果各位只纠结于这个算法有没有BUG、有没有局限性、效率是否达到最佳,那么我只能说很遗憾,各位没有体会到我的目的。
我的目的只有一个:条条大路通罗马,不要禁锢自己的思想,我们的算法其实可以更有趣,享受编程吧! 11 楼 cq062364 2011-04-14 我觉得用位图比较好,反正就26个字母,位图的大小就26,用大字符串建立位图,然后再位图中搜索小字符串中的每个字符。 12 楼 darren_nizna 2011-04-17 这个算法局限性很大,字符串长了就得用大数。 13 楼 sweat89 2011-04-19 呵呵 有点意思 14 楼 C.T 2011-04-29 如果各位只纠结于这个算法有没有BUG、有没有局限性、效率是否达到最佳,那么我只能说很遗憾,各位没有体会到我的目的。
大家思考的时候都是从自身的方向出发的,不能理解你的感受很正常。大家看的方向不一样,风景不一样。