飘飞的海

 

2012年9月27日

求最长重复子串

摘要: 一、问题描述给定一个字符串,求出其最长重复子串例如:abcdabcd ,最长重复子串是 abcd最长重复子串可以重叠例如:abcdabcda ,这时最长重复子串是 abcda ,中间的 a 是被重叠的。二、分析1、直观的解法首先检测长度为 n - 1 的字符串情况,如果不存在重复则检测 n - 2, 一直递减下去,直到 1 。这种方法的时间复杂度是 O(N * N * N),其中包括三部分,长度纬度、根据长度检测的字符串数目、字符串检测。2、使用后缀数组后缀数组:例如对于字符串String str="banana"的后缀数组是a[0]="anana",a 阅读全文

posted @ 2012-09-27 17:25 飘飞的海 阅读(471) 评论(1) 推荐(0) 编辑

数状数组

摘要: 一、概述树状数组(binary indexed tree),能够高效地获取数组中连续n个数的和。概括说,树状数组通常用于解决以下问题:数组A中的元素可能不断地被修改,怎样才能快速地获取连续几个数的和?二、树状数组基本操作普通数组(共n个元素)的元素修改和连续元素求和的复杂度分别为O(1)和O(n)。树状数组通过将线性结构数组转换成伪树状结构(线性结构只能逐个扫描元素,而树状结构可以实现跳跃式扫描),使得修改和求和复杂度均为O(lgn),大大提高了整体效率。给定序列(数列)A,我们设一个数组C满足C[i] = A[i–2^k+ 1] + … + A[i] //其中,k为i在二进制下末尾0的个数, 阅读全文

posted @ 2012-09-27 11:26 飘飞的海 阅读(224) 评论(0) 推荐(0) 编辑

导航