我想以一种将删除所有额外空格和散列的方式更改数字字符串,并且输出将具有正确长度的带有散列的正确字符串。除非字符串的剩余长度为 2 或 4,否则它必须在每 3 个数字之后。
我尝试使用的代码能够给我一半的结果,我无法编写一个代码,其中字符串的剩余长度为 4,然后将它们分成 2,中间有一个哈希值。它将剩余的 4 也分为 3 和 1。例如 - 1234 必须是 12-34 而不是 123-1。
def solution(s):
# this will remove all extra spaces and hashes
number = "".join(s.split()).replace('-','')
return '-'.join(number[i:i+3] for i in range(0, len(number), 3))
print(solution("00-44 48 5555 8361")) # Output is 004-448-555-583-61
print(solution("0 - 22 1985--324")) # Output is 022-198-532-4 (not expected)
输出必须如下所示:
print(solution("00-44 48 5555 8361")) # Expected O/P - 004-448-555-583-61
print(solution("0 - 22 1985--324")) # Expected O/P - 022-198-53-24
我认为您的代码无法按预期工作的原因很明显 - 以贪婪的方式在每个第三个字符之间放置一个连字符,就像您正在做的那样将len(number)%3
在字符串的末尾留下(0、1 或 2)个字符。根据您的要求,您需要担心的只是剩余 1 个字符的情况:
"123-456-789"
剩余零个字符,这很好。"123-456-789-0"
剩下一个字符,但应该是"123-456-78-90
“"123-456-789-01"
有两个剩余的字符,这很好。"123-456-789-012"
剩下三个字符,但它与上面的 (1.) 相同,所以没问题。这意味着您所要做的就是专门处理剩余一个字符的情况。更好的是,您需要做的就是交换倒数第三个和倒数第二个字符,如下所示:
"123-456-789-0" # this is wrong
# ^^
# || # swap these two, however, and you get...
"123-456-78-90" # the correct output
所以你可以保留你的原始代码并在最后添加一个简单的检查来进行交换。不幸的是,字符串在 python 中是不可变的,所以你必须用交换的字符重建一个新的字符串。这样做很长的路要走:
def solution(s):
# this will remove all extra spaces and hashes
number = "".join(s.split()).replace('-','')
dashed = '-'.join(number[i:i+3] for i in range(0, len(number), 3))
if len(number)%3 == 1:
dashed = dashed[:-3] + "-" + dashed[-3::2]
return dashed
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句