列表

详情


1427. 字符串的左右移

给定一个包含小写英文字母的字符串 s 以及一个矩阵 shift,其中 shift[i] = [direction, amount]

对这个字符串进行所有操作后,返回最终结果。

 

示例 1:

输入:s = "abc", shift = [[0,1],[1,2]]
输出:"cab"
解释:
[0,1] 表示左移 1 位。 "abc" -> "bca"
[1,2] 表示右移 2 位。 "bca" -> "cab"

示例 2:

输入:s = "abcdefg", shift = [[1,1],[1,1],[0,2],[1,3]]
输出:"efgabcd"
解释: 
[1,1] 表示右移 1 位。 "abcdefg" -> "gabcdef"
[1,1] 表示右移 1 位。 "gabcdef" -> "fgabcde"
[0,2] 表示左移 2 位。 "fgabcde" -> "abcdefg"
[1,3] 表示右移 3 位。 "abcdefg" -> "efgabcd"

 

提示:

原站题解

去查看

上次编辑到这里,代码来自缓存 点击恢复默认模板
class Solution { public: string stringShift(string s, vector<vector<int>>& shift) { } };

golang 解法, 执行用时: 0 ms, 内存消耗: 2 MB, 提交时间: 2023-10-15 18:17:17

func stringShift1(s string, shift [][]int) string {
    moves := 0 // 0 表示不动, > 0表示向左shift,< 0表示向右shift
    for _, s := range shift {
        if s[0] == 0 {
            moves -= s[1]
        } else {
            moves += s[1]
        }
    }

    // 调整moves到<n的正数
    n := len(s)
    moves %= n
    if moves < 0 {
        moves += n
    }

    if moves == 0 { // 不动
        return s
    }

    bytes := make([]byte, n)
    for i := 0; i < n; i++ {
        bytes[i] = s[(i - moves + n) % n]
    }

    return string(bytes)
}

func stringShift(s string, shift [][]int) string {
    action, n := 0, len(s)
    for _, sh := range shift {
        dir, amount := sh[0], sh[1]
        if dir == 0 {
            action -= amount
        } else {
            action += amount
        }
    }
    if action > 0 {
        action %= n
    } else {
        action = -action
        action %= n
        action = n-action
    }
    return s[n-action:]+s[:n-action]
}

python3 解法, 执行用时: 44 ms, 内存消耗: 16.2 MB, 提交时间: 2023-10-15 18:16:11

class Solution:
    def stringShift(self, s: str, shift: List[List[int]]) -> str:
        n = len(s)
        left_shift = 0
        for direction, dist in shift:
            if direction == 0:
                left_shift += dist
            else:
                left_shift -= dist
        left_shift %= n
        if left_shift == 0:
            return s
        return s[left_shift: ] + s[ :left_shift]

java 解法, 执行用时: 0 ms, 内存消耗: 39.4 MB, 提交时间: 2023-10-15 18:15:40

class Solution {
    public String stringShift(String s, int[][] shift) {
        int move = 0;
        for(int[] sh : shift) {
            if(sh[0] == 0) {
                move -= sh[1];
            } else {
                move += sh[1];
            }
        }
        move = move < 0 ? ((move % s.length()) + s.length()) % s.length() : move % s.length();

        return s.substring(s.length() - move, s.length()) + s.substring(0, s.length() - move);
    }
}

上一题