def encode(source):
dest="";
i=0
while i<len(source):
runLength = 1;
while source[runLength] == source[runLength-1]:
runLength=runLength+1
i=i+1
dest+=source[i]
dest+=str(runLength)
i=i+1
return dest
source = raw_input("")
print (encode(source))
示例输入:
AABBCCCCDADD
示例输出:
3A2B4C3D
请修复它,大多数改变第6行应该这样做我认为
答案 0 :(得分:0)
最好的方法是使用width: 100%
来保持计数,OrderedDict也会为您保留订单:
dict
这只适用于你输入的字符串,其中字符不会在以后重复,如果它们我们可以在循环中跟踪并在我们遇到与之前不同的字符时重置计数:< / p>
from collections import OrderedDict
def encode(source):
od = OrderedDict()
# iterate over input string
for ch in source:
# create key/value pairing if key not alread in dict
od.setdefault(ch,0)
# increase count by one each time we see the char/key
od[ch] += 1
# join the key/char and the value/count for each char
return "".join([str(v)+k for k,v in od.items()])
source = "AABBCCCCDDD"
print (encode(source))
输出:
def encode(source):
it = iter(source)
# set prev to first char from source
prev = next(it)
count = 1
out = ""
for ch in it:
# if prev and char are equal add 1 to count
if prev == ch:
count += 1
# else we don't have sequence so add count and prev char to output string
# and reset count to 1
else:
out += prev + str(count)
count = 1
prev = ch
# catch out last match or a single string
out += prev + str(count)
return out
答案 1 :(得分:0)
您可以使用.html{
position:relative;
}
完成此操作。
dictionary
答案 2 :(得分:0)
作为替代解决方案,有一个名为itertools
的Python库,它具有在这种情况下很有用的功能。它可以将您的字符串拆分为相同字母的组。
import itertools
def encode(source):
return "".join(["%u%s" % (len(list(g)), k) for k,g in itertools.groupby(source)])
print encode("AABBCCCCDDD")
这将打印出以下内容:
2A2B4C3D
要了解其工作原理,请参阅以下较小的版本:
for k, g in itertools.groupby("AABBCCCCDDD"):
print k, list(g)
这将打印以下内容:
A ['A', 'A']
B ['B', 'B']
C ['C', 'C', 'C', 'C']
D ['D', 'D', 'D']
您可以看到k
是关键,g
是该组。如果我们采用每个组的长度,您就可以得到解决方案。