【AcWing蓝桥杯集训·每日一题】【二分】【1460. 我在哪?】Python解

【Week 1_2.15】二分

目录

【Week 1_2.15】二分

AcWing 1460. 我在哪?(每日一题)

1.题目描述

2.代码实现


AcWing 1460. 我在哪?(每日一题)

1.题目描述

【AcWing蓝桥杯集训·每日一题】【二分】【1460. 我在哪?】Python解_第1张图片

2.代码实现

  • 暴力
N = int(input())
S = input()
# 本题数据不大,可以考虑暴力枚举直接解决
for K in range(1, N + 1):
    m, n = 0, K
    S_sub = []
    while n <= N:
        S_sub.append(S[m:n])
        m += 1
        n += 1
    # 这里可以使用双循环,但利用set集合没有重复元素的特点可以快速进行判断
    if len(S_sub) == len(set(S_sub)):  # 集合去重复
        print(K)
        break
  • 二分
N = int(input())
S = input()
# 二分法
l = 1
r = N
while l <= r:
    mid = (l + r) // 2
    m, n = 0, mid
    S_sub = []
    while n <= N:
        S_sub.append(S[m:n])
        m += 1
        n += 1
    if len(S_sub) > len(set(S_sub)):
        l = mid + 1
    if len(S_sub) == len(set(S_sub)):
        r = mid
        if l == r:
            print(mid)
            break

如有不足或不解之处欢迎留言指正哈。

如有帮助可以点赞收藏嘛,感谢~

你可能感兴趣的:(python,蓝桥杯,蓝桥杯,算法,python)