使用沿字符串重复的字符对字符串进行编码和解码
Encode and Decode a String using the repetition of characters along the string
我一直在努力解决这个问题,但到目前为止我还没有成功 :( 所以任何指导都会很棒,特别是因为我刚刚开始学习 Python,所以问题是这个:
给定一个字符串,首先你必须使用以下算法对其进行编码:
- 对于每个字母,去掉连续重复的部分(如果有的话),然后加上一个数字,表示它连续出现的次数,包括第一次。
完成编码后,您必须创建一个函数来使用相同的 criteria/assumptions.
对其进行解码
它应该如何工作的一些例子:
- “Goooooooooddddd”=>“G1o9d5”
- “哦哦”=>“O1o3”
- “字谜”=>“a1n1a1g1r1a1m1”
到目前为止,我有以下编码代码:
def encode(s) :
i = 0
while( i < len(s) - 1) :
count = 1
while s[i] == s[i + 1] :
i += 1
count += 1
if i + 1 == len(s):
break
print(str(s[i]) + str(count),
end = "")
i += 1
print()
# Code for the driver
if __name__ == "__main__" :
encode("Goooooooooddddd")
encode("Oooo")
With this I'm getting the needed output for the encoding part at least.
但我无法通过使用此编码作为起点来实际执行 “解码” 部分。
我知道这个问题很复杂 silly/basic 但我实在想不通
在此先感谢 guidance/tips 对这个挑战问题
伪代码解码将涉及:
- 逐个字符扫描编码字符串
- 如果字符是字母则将其添加到解码结果
- 对 1 个或多个字符的数字序列的编码字符串进行子扫描,直到下一个字母字符或字符串结尾。
- 重复最后一个解码的字符串字符这么多次减一。
- 从第 1 步继续,直到编码字符串被完全消耗。
解码在 python 中会非常简单,因为它允许字符乘法:
它可能是这样的:
def decode(s):
a = list(s) # separate each character and number
i = 0
z = len(a)
while i < z-1: #This for block checks for any 2 digit numbers
print(i, a[i])
if a[i].isdigit() and a[i+1].isdigit():
a[i] = a[i]+a[i+1]
a.pop(i+1)
print(a)
z-=1
try:
if a[i+2].isdigit():
i-=1
except IndexError:
i-=1
i+=1
final_str = '' # the string that will have the value
for i in range(0, len(a), 2):
final_str += a[i]*int(a[i+1]) #a[i] is the character and int(a[i+1]) is the number of times.
# They are multiplied and then added to the final string
print(final_str) # The final string is printed
感谢@Tobi208 指出错误。
我一直在努力解决这个问题,但到目前为止我还没有成功 :( 所以任何指导都会很棒,特别是因为我刚刚开始学习 Python,所以问题是这个:
给定一个字符串,首先你必须使用以下算法对其进行编码:
- 对于每个字母,去掉连续重复的部分(如果有的话),然后加上一个数字,表示它连续出现的次数,包括第一次。
完成编码后,您必须创建一个函数来使用相同的 criteria/assumptions.
对其进行解码它应该如何工作的一些例子:
- “Goooooooooddddd”=>“G1o9d5”
- “哦哦”=>“O1o3”
- “字谜”=>“a1n1a1g1r1a1m1”
到目前为止,我有以下编码代码:
def encode(s) :
i = 0
while( i < len(s) - 1) :
count = 1
while s[i] == s[i + 1] :
i += 1
count += 1
if i + 1 == len(s):
break
print(str(s[i]) + str(count),
end = "")
i += 1
print()
# Code for the driver
if __name__ == "__main__" :
encode("Goooooooooddddd")
encode("Oooo")
With this I'm getting the needed output for the encoding part at least.
但我无法通过使用此编码作为起点来实际执行 “解码” 部分。
我知道这个问题很复杂 silly/basic 但我实在想不通 在此先感谢 guidance/tips 对这个挑战问题
伪代码解码将涉及:
- 逐个字符扫描编码字符串
- 如果字符是字母则将其添加到解码结果
- 对 1 个或多个字符的数字序列的编码字符串进行子扫描,直到下一个字母字符或字符串结尾。
- 重复最后一个解码的字符串字符这么多次减一。
- 从第 1 步继续,直到编码字符串被完全消耗。
解码在 python 中会非常简单,因为它允许字符乘法: 它可能是这样的:
def decode(s):
a = list(s) # separate each character and number
i = 0
z = len(a)
while i < z-1: #This for block checks for any 2 digit numbers
print(i, a[i])
if a[i].isdigit() and a[i+1].isdigit():
a[i] = a[i]+a[i+1]
a.pop(i+1)
print(a)
z-=1
try:
if a[i+2].isdigit():
i-=1
except IndexError:
i-=1
i+=1
final_str = '' # the string that will have the value
for i in range(0, len(a), 2):
final_str += a[i]*int(a[i+1]) #a[i] is the character and int(a[i+1]) is the number of times.
# They are multiplied and then added to the final string
print(final_str) # The final string is printed
感谢@Tobi208 指出错误。