今天是Andy学Python的第46 天哦!
大家好,我是Andy。
01.
项目需求
旋转列表是把列表从右向左旋转。
旋转字符串则是把字符串从左向右旋转。
循环右移1位,就是把字符串最右端的字符取出,然后再把这个字符追加到字符串的首位。
以此类推,循环右移k位,就是把字符串右端的k位字符取出,然后再把这些字符按顺序逐一追加到列表的左端。
输入str = "abcdefg", k = 3, 输出"efgabcd".
输入str = "abcdefg", k = 0, 输出"abcdefg".
输入str = "abcdefg", k = 1, 输出"gabcdef".
输入str = "abcdefg", k = 2, 输出"fgabcde".
02.
拆解任务
与旋转列表方法相同,采用切片方法分别取出字符串的两部分,再拼接。
右移与左移不同的地方在于,采用-k反向取值。
03.
版本1.0
该方法基本满足项目4个例子。
04.
书上代码
# 书上代码
class Solution:
# 参数s:字符列表
# 参数k:整数
# 返回值:无
def rotateString(self, s, k):
if len(s) > 0:
k = k % len(s)
temp = (s + s)[len(s) - k : 2 * len(s) - k]
for i in range(len(temp)):
s[i] = temp[i]
# 主函数
if __name__ == '__main__':
s = ["a", "b", "c", "d", "e", "f", "g"]
k = 3
solution = Solution()
solution.rotateString(s, k)
print("输入:s = ", ["a", "b", "c", "d", "e", "g"], " ", "k = ",k)
print("输出:s = ", s)
05.
思考
书上代码增加了k = k % len(s),应该是考虑偏移量如果超过字符串长度的情况。
验证偏移量大于字符串长度,确实函数失灵。
修改个人版本2.0
# 旋转字符串
# Andy 2021-04-02
def rotate_str(str_a, k):
k = k % len(str_a)
return str_a[-k:] + str_a[:-k] # 切片,将原字符串一分为二,再拼接
# 主函数
a = "abcdefg"
print(rotate_str(a, 3))
print(rotate_str(a, 0))
print(rotate_str(a, 1))
print(rotate_str(a, 15))
51Day Day up!
向上向善,日进一步!
每天学习,努力成长!
定个小目标,开启成长的旅程,遇见更好的自己。
这是我们和自己的约定,许诺自己不负韶华。
路虽远,行则将至;事虽难,做则必成。
成长的最好时机,就是当下。
网友评论