找到指定的新类型字符

题目:

新类型的字符定义如下:

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]
            


 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值