尺取法

尺取法是一种线性的高效率算法。记 (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 += 1
        j -= 1
        if j <= i:
            print('Y')
            break
    else:
        print("N")
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值