OD完美走位

该问题旨在找到一个长度为4的倍数的字符串,其中只包含WASD四个字母,通过替换连续子串使得WASD出现次数相等。解决方案包括统计字符频数,检查是否已平衡,如果不平衡则使用尺取法找到最小区间进行替换,确保替换后字符数量一致且剩余部分可被4整除。

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

一、题目
输入一个长度为4的倍数的字符串,字符串中仅包含WASD四个字母。
将这个字符串的连续子串用同等长度的仅包含WASD的字符串替换,如是替换后整个字符串中WASD四个字母出现的频数相同,
那么我们称替换后的字符串是完美走位
求子串的最小长度。
如果输入字符串已经平衡则输出0
二、输入
一行字符表示给定的字符串s
数据范围
1<=n<=10^5且n是4的倍数,字符串中仅包含WASD四个字母。
三。输出
一个整数表示答案
四、样例输入输出
示例1:
输入:
WASDAASD
输出
1
说明:
将第二个A替换为W,即可得到完美走位。
示例2:
输入:
AAAA
输出:
3
说明:将其中三个连续的A替换为WSD,即可得到完美走位
思路:
1:先用一个map统计字符串所有的字符个数,然后先看是否“完美”。
2:再利用经典的尺取法。
从左往右移动区间,当满足条件时,左端点右移,缩小区间,当不满足条件时,右端点右移,扩大区间,这样可以找到每个
满足条件的区间,从而可以找到最小区间。
记录不包含该区间的WASD的数量,先判断能否通过替换区间内的元素使WASD数量一致,再判断剩余位置是否是4的倍数。

考点:
尺取法

import functools
import copy

# 处理输入
input_str = input()

char_count = {'W': 0, 'A': 0, 'S': 0, 'D': 0}

# 频次统计
for single_char in input_str:
    char_count[single_char] += 1

# 特殊情况
if char_count['W'] == char_count['A'] and \
        char_count['W'] == char_count['S'] and \
        char_count['W'] == char_count['D']:
    print(0)
else:
    # 左右区间位置
    left = 0;
    right = 0;
    length = 0;

    # 替换的最小长度
    res = len(input_str);
    # 出现次数最多的字母
    max_char_num = 0;
    # 可替换字母个数, 随着指针移动,如果free_char_num 大于0且能被4整除,当前范围满足条件,左指针右移一格,否则右指针右移
    free_char_num = 0;

    char_count[input_str[0]] -= 1
    while (True):
        max_char_num = max(max((max(char_count['W'], char_count['S'])), char_count['A']), char_count['D']);
        length = right - left + 1;
        free_char_num = length - ((max_char_num - char_count['W']) + (max_char_num - char_count['S']) + (
                    max_char_num - char_count['A']) + (max_char_num - char_count['D']));
        if (free_char_num >= 0 and free_char_num % 4 == 0):
            if (length < res):
                res = length

            char_count[input_str[left]] += 1
            left += 1

        else:
            right += 1
            char_count[input_str[right]] -= 1

        if (right >= len(input_str) - 1):  # 越界即结束
            break;

    print(res)

华为OD(原生操作系统分布式)能够获得完美走位是因为它在技术和创新方面具备了许多独特的优势。 首先,华为OD引入了“分布式”概念,将操作系统从原先的单一节点模式升级为分布式的多节点模式。这样的设计使得系统可以更加高效地进行资源调度和任务分配,提升了整个系统的性能和响应速度。 其次,华为OD在技术层面进行了深入的优化和升级。它采用了轻量级的内核设计,减少了系统运行的负担,提高了系统的稳定性和安全性。同时,华为OD还支持多核心处理器的并行运算,充分利用硬件资源,提高了系统的运行效率。 除此之外,华为OD还具备了自主研发的“全栈、全装备”的能力。它不仅拥有自己独立的芯片开发能力,还包含了自研的操作系统、数据库、应用软件等一系列技术产品。这些完全自主研发的技术产品相互配合,可以更好地实现系统的协同运作,提供更加稳定可靠的服务。 最后,华为OD还注重用户体验的提升。它采用了简洁直观的用户界面设计,使得用户能够更加方便地进行操作。同时,华为OD支持多种语言和文化的适配,可以满足用户在不同地区和国家的使用需求。 综上所述,华为OD之所以能够获得完美走位,是因为它在分布式设计、技术优化、自主研发和用户体验等方面都具备了独特的优势。通过不断的创新和进化,华为OD能够满足用户的多样化需求,并提供稳定高效的服务。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值