找到指定的新类型字符

题目

新型字符定义如下:

  • 长度为1或2的字符串
  • 可以
    • 仅是小写字母,如’e’
    • 大写字母+小写字母,如‘Ab’
    • 大写字母+大写字母,如’AB‘

给定一个字符串s,s一定是若干新型字符组合的结果,比如’eaCCBi’由新型字符’e’, ‘a’, ‘CC’, 'Bi’组成。再给定一个整数k,返回k位置指定的新型字符。
s = ‘aaABCDEcBCg’

  • k = 7 -> ‘Ec’
  • k = 4 -> ‘CD’
  • k = 10 -> ‘g’

思路

从k-1位置开始,向左统计连续出现的大写字母数count,遇到小写字母停止。如果

  • count为奇数,返回s[k-1, k]
  • count为偶数
    • s[k]为大写字母,返回s[k, k+1]
    • s[k]是小写字母,返回s[k]

实现

def point_new_char(s, index):
    if s is None or index >= len(s):
        return None

    k = index - 1
    count = 0
    while k > 0 and s[k].isupper():
        k -= 1
        count += 1

    if count % 2 == 1:
        return s[index-1: index+1]
    else:
        if s[index].islower():
            return s[index]
        else:
            return s[index: index+2]

测试

def test_point_new_char():
    s = 'aaABCDEcBCg'
    assert(point_new_char(s, 7) == 'Ec')
    assert(point_new_char(s, 4) == 'CD')
    assert(point_new_char(s, 10) == 'g')
    print('pass')


if __name__ == '__main__':
    test_point_new_char()

测试2

找到指定类型的新类型字符

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值