【Leetcode】1427. 字符串的左右移

地址:力扣

题目

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

  • direction 可以为 0 (表示左移)或 1 (表示右移)。
  • amount 表示 s 左右移的位数。
  • 左移 1 位表示移除 s 的第一个字符,并将该字符插入到 s 的结尾。
  • 类似地,右移 1 位表示移除 s 的最后一个字符,并将该字符插入到 s 的开头。

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

示例

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

思路

1.先遍历所有vector中的移动步数,设置左移为+,右移为-,统计最终结果并确定dis正负号

2.通过dis来计算最后需要拼接的字符串的截断位置,根据dis正负号(代表左右移)来计算。

3.在上一步中需要注意的是:由于每次移动的步数可能大于字符串s的长度,所以要对s的长度n取模,右移(为-)则还需要加上n

代码 

class Solution {
public:
    string stringShift(string s, vector<vector<int>>& shift) {
        int dis = 0,n = s.size();
        for(auto &ope:shift){       //这一个循环是为了统计出总的左移/右移步数 +/-
            if(ope[0] == 0) {
                dis += ope[1];
            }//左移
            else
                dis -= ope[1];
        }
        //将最后的左/右移转化为字符串中的下标
        dis = (dis < 0 ? dis % n + n : dis % n);
        string res = s.substr(dis) + s.substr(0,dis);
        return res;
    }
};

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值