马蹄集第33周

题目一

无重复字串的最长字串

解题思路:

双指针:设置两个指针L,R,分别指向traget的开头和结尾,并且使用一个哈希表存储char到int的映射,然后R++,当出现重复的字符,那么要在对应的哈希表里面--。

代码:


def main():
    s=input()
    m=[0]*(256)
    count=0
    i,j=0,0
    m[ord(s[0])] = 1
    while i

第二题:最小字串覆盖

马蹄集第33周_第1张图片

思路:使用滑动窗口,当满足了包含target的条件开始删除滑动窗口的头部,知道达到最小的窗口体。
其实也就是每一次都包括两个操作:1、找到满足target的窗口2、删除滑动窗口头部。


def judge(s,t,l,r):

    m = [0] * (256)
    for i in t:
        m[ord(i)] += 1
    for i in range(l,r+1):
        if s[i] in t:
            m[ord(s[i])] -= 1
    for i in m:
        if i > 0:
            return False
    return True



def main():
    result = "No"
    s = input()
    t = input()
    l = r = 0   #定义一个滑动窗口
    num = 100000
    # print("字符串",len(s))
    while(r < len(s) and l<=r):
        if judge(s,t,l,r):
            # tmp = s[l:r + 1]
            # print("满足条件的字符串:",tmp)
            l += 1
            while judge(s,t,l,r):
                # tmp = s[l:r + 1]
                # print("滑动窗口缩小:",tmp)
                l+=1
            l -= 1
            if (r-l+1) < num:
                num = r-l+1
                result = s[l:r + 1]
        r += 1
    print(result)



if __name__ == '__main__':

    main();

第三题 方块桶

马蹄集第33周_第2张图片

题目意思:

马蹄集第33周_第3张图片

解题思路:

注意:不能只看空间两边的方块
思路:不断维护两边最高的高度


def main():
    n = int(input())
    a = [int(i) for i in input().split()]
    # print(n,a)
    l = 0
    r = n - 1
    maxl = a[0]
    maxr = a[n-1]
    ans = 0
    while l

第四题:跑步

马蹄集第33周_第4张图片

解题思路:没看懂,但是跟着例子顺了一遍大概是这个流程。

马蹄集第33周_第5张图片

ahhhh反正我是写不出来这个代码

#include 

using namespace std;

int n;
pair  a[100010];

int main( )
{
    scanf("%d",&n);
    for(int i = 1;i <= n; i++) {
        scanf("%d%d",&a[i].first,&a[i].second),a[i].second=-a[i].second;}
    sort(a+1,a+1+n);
    for(int i = 1; i <=n; i++){
        if(a[i].first == a[i+1].first) a[i].second = 1e9 -i;
        else a[i].second = -a[i].second;
    }
    int cur = 0, ans = 0,lst = 1e9;
    for(int i = n;i > 0;i--){
        if(a[i].second <= lst) lst = a[i].second,cur =0;
        ans = max(ans,++cur);
    }
    cout<

第五题:循环同构

马蹄集第33周_第6张图片

解题思路

看着就很难,等有空再写

你可能感兴趣的:(算法)