北京7月暑假班第2次课:回文子串-KMP等若干问题的讨论_邹博分析.ppt

北京7月暑假班第2次课:回文子串-KMP等若干问题的讨论_邹博分析.ppt

北京7月暑假班第2次课:回文子串-KMP等若干问题的讨论_邹博分析

回文子串-KMP等若干问题的讨论 邹博 2014年7月19日 字符串循环左移 给定一个字符串S[0…N-1],要求把S的前k个字符移动到S的尾部,如把字符串“abcdef”前面的2个字符‘a’、‘b’移动到字符串的尾部,得到新字符串“cdefab”:即字符串循环左移k。 算法要求: 时间复杂度为 O(n),空间复杂度为 O(1)。 问题分析 暴力移位法 每次循环左移1位,调用k次即可 时间复杂度O(kN),空间复杂度O(1) 三次拷贝 S[0…k] → T[0…k] S[k+1…N-1] → S[0…N-k-1] T[0…k] →S[N-k…N-1] 时间复杂度O(N),空间复杂度O(k) 优雅一点的算法 (X’Y’)’=YX 如:abcdef X=ab X’=ba Y=cdef Y’=fedc (X’Y’)’=(bafedc)’=cdefab 时间复杂度O(N),空间复杂度O(1) Code 字符串的全排列 给定字符串S[0…N-1],设计算法,枚举A的全排列。 递归算法 以字符串1234为例: 1 – 234 2 – 134 3 – 214 4 – 231 递归Code 如果字符有重复 去除重复字符的递归算法 以字符1223为例: 1 – 223 2 – 123 3 – 221 带重复字符的全排列就是从第一个字符起每

文档评论(0)

1亿VIP精品文档

相关文档