Perform String Shifts
题目描述:给一个字符串和一个矩阵。矩阵中的元素为(移动方向,移动距离)。当移动方向为1时将尾部元素移动到头部,有几个移动距离就依次移动几个尾部元素,类似,当移动方向为0时将头部元素移动到尾部。
Example:
Input: s = "abc", shift = [[0,1],[1,2]]
Output: "cab"
Explanation:
[0,1] means shift to left by 1. "abc" -> "bca"
[1,2] means shift to right by 2. "bca" -> "cab"
Input: s = "abcdefg", shift = [[1,1],[1,1],[0,2],[1,3]]
Output: "efgabcd"
Explanation:
[1,1] means shift to right by 1. "abcdefg" -> "gabcdef"
[1,1] means shift to right by 1. "gabcdef" -> "fgabcde"
[0,2] means shift to left by 2. "fgabcde" -> "abcdefg"
[1,3] means shift to right by 3. "abcdefg" -> "efgabcd"
解法:
只需要遍历矩阵,设置一个变量flag表示最后移动的方向及大小:flag初始为0
遍历矩阵中的元组,遇到1,则flag加上移动距离,遇到0则flag减去移动距离。
最后看flag的正负及大小,正则表示向左移动,负则表示向右移动,flag的绝对值表示移动的字符串个数。
0将头添加到最后
1将尾添加到最前
class Solution:
def stringShift(self, s: str, shift: List[List[int]]) -> str:
flag = 0
for i in range(len(shift)):
if shift[i][0] == 1:
flag += shift[i][1]
else:
flag -= shift[i][1]
print(flag)
if flag >0:#如果为正,说明1大,说明将后几位添加到前面
flag = flag % len(s)#有可能出现flag最后大于字符串长度的情况,于是将其对字符串长度取余
if flag > 0 :
return s[-flag:] + s[:len(s) - abs(flag)]
else:#取余后flag只可能是大于等于0,如果等于0,说明不需要移动返回字符串。
return s
else:
flag = abs(flag) % len(s)
return s[abs(flag):] + s[:abs(flag)]
本文详细解析了如何通过遍历矩阵来实现字符串的左移和右移操作,提供了Python代码示例,展示了如何根据移动方向和距离进行字符串的高效位移。
143

被折叠的 条评论
为什么被折叠?



