题目:
新类型的字符定义如下:
1、新类型字符是长度为1或2的字符串
2、表现形式可以仅是小写字母,也可以是大写字母+小写字母,也可以是大写字母+大写字母。例如,a,Bc,DD都是符合条件的新类型字符。
现在给定一个字符串str,str一定是若干新类型字符正确组合的结果。比如“eaCCBi”,由新类型字符“e”,“a”,“CC”,“Bi”拼成。再给定一个整数k,代表str中的位置。请返回被k位置指中的新类型字符。
举例:
str = “aaABCDEcBCg”.
k = 7时,返回“Ec”
k = 4时,返回“CD”
k = 10时,返回“g”
基本思路:
一种笨方法是从左向右遍历,依次划出新类型字符,到k位置时就知道指定的新类型字符是什么。这里不在详述。
更快的方法。从k-1位置开始,向左统计大写字母的个数记为uNum,遇到小写字母就停止。
1、如果uNum为奇数,str[k-1…k]就是被指中的新类型字符
2、如果uNum为偶数且str[k]为大写,则str[k…k+1]就是被指中的新类型字符
3、如果str[k]为小写,str[k]就是被指中的新类型字符
def pointNewchar(s,k):
if s == None or len(s) == 0 or k < 0 or k > len(s):
return ""
num = 0
for i in range(k-1,-1,-1):
if s[k].islower():
break
num +=1
if num & 1 == 1: //为奇数
return s[k-1:k+1]
elif s[k].isupper(): //偶数 大写
return s[k:k+2]
else: //偶数 小写
return s[k]