字符串的统计字符串

字符串的统计字符串

统计字符串

给定一个字符串s,返回s的统计字符串。
例如,“aaabbadddffc"的统计字符串为"a_3_b_2_a_1_d_3_f_2_c_1”。

算法思路

每次遇见不相同的相邻字符时,拼接其数量
最后再拼接最后一个字符的数量

相应代码
# 获取统计字符串
def get_count_str(s):
    if s is None or len(s) == 0:
        return ""
    cstr = s[0] + '_'
    count = 1
    for i in range(1, len(s)):
        if s[i] == s[i - 1]:
            count += 1
        else:
            cstr = cstr + str(count) + '_' + s[i] + '_'
            count = 1
    # 拼接最后字符数量
    if count != 0:
        cstr = cstr + str(count)
    return cstr
# 简单测试
if __name__ == '__main__':
    s = "aaabbadddffc"
    print(get_count_str(s))  # a_3_b_2_a_1_d_3_f_2_c_1

检索统计字符串

给定一个字符串的统计字符串cstr,再给定一个整数index,返回cstr所代表的原始字符串上的第index个字符。
例如,"a_1_b_100"所代表的原始字符串上第0个字符是’a’,第50个字符是’b’。

算法思路

统计字符串包含字母字符,’‘和数字字符;
flag记录进入字母字符还是数字字符,’
'表示flag状态的切换;
c记录当前的字符,对应的数字字符转换为数字numsum记录之前的字符总和;
若总和sum超过索引index,则返回对应的字母字符c
否则返回0(表示空字符)。

相应代码
# 检索统计字符串
def index_of_count_str(cstr, index):
    if cstr is None or len(cstr) == 0 or index < 0:
        return 0
    flag = True
    num = 0
    count = 0
    c = None
    for i in range(len(cstr)):
        # 字母
        if cstr[i] != '_' and flag is True:
            c = cstr[i]
        # 字母 -> 数字
        elif cstr[i] == '_' and flag is True:
            flag = False
        # 数字
        elif cstr[i] != '_' and flag is False:
            num = 10 * num + int(cstr[i])
        # 数字 -> 字母
        elif cstr[i] == '_' and flag is False:
            count += num
            num = 0
            flag = True
            if count > index:
                return c
    # 加上最后字母的统计数字
    count += num
    if count > index:
        return c
    else:
        return 0
# 简单测试
if __name__ == '__main__':
    cstr = "a_1_b_100"
    print(index_of_count_str(cstr, 0))  # a
    print(index_of_count_str(cstr, 50))  # b

有任何疑问和建议,欢迎在评论区留言和指正!

感谢您所花费的时间与精力!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值