题目
新型字符定义如下:
- 长度为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()