题目
针对一个只含数字的字符串,对其每3个数字进行一次翻转,如下:
字符串:123456789 ==> 翻转后:321654987
如果最后待翻转的不足3个字符,也同样进行翻转,如下:
字符串:12345678 ==> 翻转后:32165487
实现思路1
- 遍历字符串
- 每间隔3个字符,对其进行翻转,然后拼接到新字符串
- 遍历结束后,判断新字符串的长度,是否和原字符串一致
- 如果不一致则需要对剩余部分字符进行翻转,再拼接到新字符串
代码实现
def demo(s):
new_str = ""
for i in range(len(s)):
if (i + 1) % 3 == 0:
new_str += s[i-2:i+1][::-1]
if len(s) != len(new_str):
new_str += s[len(new_str):][::-1]
return new_str
old_str = "12345678"
print(demo(old_str))
实现思路2
- 遍历字符串,步长为3
- 准备一个列表,每3个字符,作为一个字符串添加到列表中
- 遍历列表,对列表中的每个字符串进行翻转,再通过
join()
方法用依次拼接
代码实现
def demo(s):
temp = []
for i in range(0, len(s), 3):
temp.append(s[i:i+3])
return "".join([i[::-1] for i in temp])
old_str = "12345678"
print(demo(old_str))
两行代码实现
old_str = "12345678"
print("".join([old_str[i:i+3][::-1] for i in range(0, len(old_str), 3)]))