【题目】
给定一个字符串str,返回str的统计字符串。例如,“aaabbadddffc”的统计字符串为“a_3_b_2_1_d_3_f_2_c_1”。
【补充题目】
给定一个字符串的统计字符串cstr,再给定一个整数index,返回cstr所代表的原始字符串上第index个字符。例如,”a_1_b_100”所代表的原始字符串上第0个字符是‘a’,第50个字符是‘b’。
【基本思路】
原问题。从左到右遍历str,如果发现当前字符不等于前一个字符,就将之前的字符和频数添加到新的字符串。详情参照如下代码。
补充题目。
使用posi用来判断当前字符是字母字符还是数字字符,True表示字母字符,False表示数字字符。初始时令posi = True。从左到右遍历字符串,如果遇到‘_’,就反转posi。
每当遇到下一个字母,就将之前的字母以及频数加到新字符串。
注意处理字符串的结尾。
详情见如下代码
下面是使用python3.5实现的代码
#字符串的统计字符串
#原问题
def getCountString(str1):
if str1 == None or str1 == '':
return ''
res = str1[0]
num = 1
for i in range(1, len(str1)):
if str1[i] == str1[i-1]:
num += 1
else:
res = res + '_' + str(num) + '_' + str1[i]
num = 1
return res + '_' + str(num)
#补充题目
def getCharAt(str1, index):
if str1 == None or str1 == '' or index < 0:
return ''
posi = True
cur = ''
num = 0
sum = 0
for i in range(len(str1)):
if str1[i] == '_':
posi = not posi
elif posi:
sum += num
if sum > index:
return cur
cur = str1[i]
num = 0
else:
num = num * 10 +int(str1[i])
return cur if sum+num > index else ''