> 文章列表 > 尺取法

尺取法

尺取法

尺取法是一种线性的高效率算法。记 (L, R ) 为一个序列内以L为起点的最短合法区间,
如果R随L的增大而增大的,就可以使用尺取法。具体的做法是不断的枚举 L,同时求出R。
因为 R 随 L增大而增大,所以总时间复杂度为 O(n)

指针i、j的两种方向:

反向扫描:i、j方向相反,i从头到尾,j从尾到头,在中间相会。 “左右指针”

同向扫描:i、j方向相同,都从头到尾,速度不同,例如让j跑在i前面。 “快慢指针”

反向扫描:回文判定

【题目描述】给定一个长度为 n 的字符串 S。请你判断字符串 S是否回文。
【输入描述】输入仅1行包含一个字符串S。1≤|S|≤10**6,保证S只包含大小写、字母。
【输出描述】若字符串S为回文串,则输出Y,否则输出N。

反向扫描的两个指针i、j,指针i从左向右扫描,指针j从右向左扫描,在中间i < j处相遇并停止

s = input()
i = 0
j = len(s) - 1
if i == j:print(\'Y\')
else:while s[i] == s[j]:i += 1j -= 1if j <= i:print(\'Y\')breakelse:print(\"N\"