适逢国庆,这次的题目较简单,属于送分的题目。 普通的提取重复值,加了一些变化,打乱了字符顺序。 第一种的解法是 把每个字符串或它的ASC码 按相同的顺序排列,形成新的统一的字符串, 然后再利用字典提取重复值,论坛里有很多这样的列子。 第二种比较快的方法是,利用每个asc码 进行特殊计算后累加,也可以得到相同的数字。 xiangchendub会员 采用的此方法,Log(Abs(Asc码)) 返回 双精度浮点型,考虑到计算精度,取累加后的前15位 做为 DNA 值 这种方法唯一的缺点: 在理论上存在出错的可能,两个不同的相当长的字符串,会有可能有一样的 DNA值。 但这仅仅是理论上的,实际需要中出错的概率 无限接近 0 。所以在处理类似问题上,这种方法是相当可靠的,我曾尝试找出这样的两个字符串,但最终还是放弃了,即便是找出来了,也是毫无意义的“乱码”。 第三种 方法 利用二进制数组,然后再对它排序,形成新的字符串作为 DNA,这种方法与第一种类似,但快很多。VB(A)中,二进制数组与字符串之间的 转化是非常快的,没有专用的函数,直接用 等于号(=) 赋值。 会员中没有此类答案。 第一和第三种方法都需要进行数组排序,类似的方法很多,冒泡法,快速法,桶式,希尔 堆式......搜索一下选择合适的套用就行了。 附件里 提供了两种比较快的方法。
[此贴子已经被作者于2008-10-23 2:50:47编辑过] |