欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

字符串的统计字符串

程序员文章站 2022-03-11 16:16:07
...

字符串的统计字符串

统计字符串

给定一个字符串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

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

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