找到指定的新类型字符

题目

新型字符定义如下:

  • 长度为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

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

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