字符串的统计字符串

文章目录

    • 字符串的统计字符串
      • 统计字符串
        • 算法思路
        • 相应代码
      • 检索统计字符串
        • 算法思路
        • 相应代码

字符串的统计字符串

统计字符串

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

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

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

你可能感兴趣的:(程序员代码面试指南)