深信服笔试20201015

这篇博客介绍了两道深信服笔试题,第一题涉及日志分析,要求统计字符串中'swr'序列作为攻击出现的次数。第二题是一个带有约束条件的爬楼梯问题,小强跳台阶可以跳1、2、3级,但跳3级后有k次不能再次跳3级。博主给出了部分思路,并邀请读者分享解题想法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题一:现在有一个日志表,表中存在n条日志,每条日志是一条字符串,该字符串仅包含小写。当字符串中顺序出现’s’、‘w’、'r’时,视为一次可能存在的攻击,请统计出总共有多少条攻击?
示例1:
输入
2
sawara
rws
输出
1
0

示例2:
输入
wsswrrw
sswwrr
输出
4
8

思路:
统计每个w之前所有的s和之后所有的r的数量。
题解:

lines = int(input())
for line in range(lines):
    log_txt = input()
    dp_s = [0] * (len(log_txt) + 1)
    dp_w = [0] * (len(log_txt) + 1)
    dp_r = [0] * (len(log_txt) + 2)
    count = 0
    #dp = [0] * (len(log_txt))
    for i in range(1, len(log_txt) + 1):
        dp_s[i] = dp_s[i - 1]
        if log_txt[i - 1] == 's':
            dp_s[i] += 1
        if log_txt[i - 1] == 'w':
            dp_w[i] = 1
        dp_r[len(log_txt) - i + 1] = dp_r[len(log_txt) - i + 2]
        if log_txt[len(log_txt) - i] == 'r':
            dp_r[len(log_txt) - i + 1] += 1
    for i in range(1,len(log_txt) + 1):
        if dp_w[i] == 1:
            count += dp_r[i] * dp_s[i]
    count = count % 1000000007
    #print(count, dp_s, dp_w, dp_r)
    print(count)

问题二:小强一次可以跳1级、2级、3级,但如果一次跳3级,那么往后k次都不能再跳3级,比如k = 10 ,那么一次跳3级台阶后,接下来的10次都不能再跳3级。

输入描述:
第一行一个正整数T(T <= 10),表示T个测试样例;对于每个测试样例,输入两个整数N(1 < N < 10000)、K(0 <= K <= 100)。
输出描述:
输出T行,每行一个总数,表示跳法的总数。
结果请对100007取值。
示例1
输入
2
3 0
6 1
输出
4
23

思路:去掉k次限制,就是很简单的爬楼梯问题,但这个k次限制,没有思路。大佬们有想法的话欢迎交流。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值