华为OD机考 python 【公共字符串】

描述

你有一堆字符串。你的任务是找出这堆字符串共同拥有的那段尾字符,如果没有共同的尾,就回答"@Zero"。

具体规定:

字符串的数量至少为2,最多为1000。
每个字符串的字符都是ASCII码里的,所以范围是[1, 126]。
示范:
比如,给你[“abc”,“bbc”,“c”],你应该回答"c"。
但如果给你[“aa”,“bb”,“cc”],你应该回答"@Zero"。

代码

def find_common_suffix(strs):
    if not strs:
        return "@Zero"
    
    # 找出最短字符
华为OD机考中,字符串长度相关问题有多种类型,以下是不同问题的Python解决方法示例: ### 找到长度第 k 长的由同一字母组成的子串 根据引用[1],对于在由大写字母组成的字符串中找长度第 k 长的由同一字母组成的子串的问题,可通过遍历字符串,统计同一字母连续出现的长度,并对这些长度进行排序来解决。 ```python # 假设实现函数如下 def find_kth_longest_substring(s, k): lengths = [] i = 0 while i < len(s): count = 1 while i + 1 < len(s) and s[i] == s[i + 1]: count += 1 i += 1 lengths.append(count) i += 1 lengths.sort(reverse=True) if k <= len(lengths): return lengths[k - 1] return 0 ``` ### 全1子串最大长度 引用[5]中提到的给定由字符0和1组成的字符串,以及最多可将原字符串中0变成1的次数 k,求改变后的字符串中全1子串的最大长度的问题,可使用滑动窗口的方法解决。 ```python str1 = input('请输入字符串:') K = int(input('请输入K:')) left, right, end = 0, 0, len(str1) max_len = 0 while right <= end: if str1[left:right].count("0") <= K: max_len = max(max_len, len(str1[left:right])) right += 1 else: left += 1 print(max_len) ``` ### 最长满足条件子字符串长度 对于如引用[4]中找到最长的满足条件(子字符串中某些字符出现次数为偶数)的子字符串问题,可通过遍历所有可能的子字符串,统计字符出现次数,判断是否满足条件并更新最大长度。 ```python s = "oxdolxl" maxLength = 0 for i in range(len(s)): char_count = {} for j in range(i, len(s)): if s[j] in char_count: char_count[s[j]] += 1 else: char_count[s[j]] = 1 is_valid = True for count in char_count.values(): if count % 2 != 0: is_valid = False break if is_valid: maxLength = max(maxLength, j - i + 1) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

AlgorithmHero

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值