字符串的统计字符串
程序员文章站
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
记录当前的字符,对应的数字字符转换为数字num
,sum
记录之前的字符总和;
若总和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
有任何疑问和建议,欢迎在评论区留言和指正!
感谢您所花费的时间与精力!
上一篇: 判断一个点是否在矩形内部
下一篇: 1325:星号阵列3