每日一练(32)(左旋转字符串)
title: 每日一练(32):左旋转字符串
categories:[剑指offer]
tags:[每日一练]
date: 2022/03/07
每日一练(32):左旋转字符串
字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部。请定义一个函数实现字符串左旋转操作的功能。比如,输入字符串"abcdefg"和数字2,该函数将返回左旋转两位得到的结果"cdefgab"。
示例 1:
输入: s = "abcdefg", k = 2
输出: "cdefgab"
示例 2:
输入: s = "lrloseumgh", k = 6
输出: "umghlrlose"
限制:
1 <= k < s.length <= 10000
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/probl...
方法一:切分
算法流程:
【每日一练(32)(左旋转字符串)】字符串的拼接与旋转有一个挺好的办法 就是将字符串倍增成为两个同样的字符串拼接的长字符串,然后旋转均可
//1
string reverseLeftWords(string s, int n) {
int len = s.size();
s += s;
return s.substr(n, len);
}
//2
string reverseLeftWords(string s, int n) {
s += s;
return s.substr(n, s.size() / 2);
}
//3
string reverseLeftWords(string s, int n) {
return (s+s).substr(n, s.size());
}
方法二:删除
算法流程:
将前k个字符插入字符串,然后将前k个删除即可。空间0(1)
string reverseLeftWords(string s, int n) {
for (int i = 0;
i < s.size();
i++) {
s.push_back(s[i]);
}
s.erase(0, n);
return s;
}
推荐阅读
- 每日leetcode——138. 复制带随机指针的链表
- 每日leetcode——92. 反转链表 II
- 每日刷题———蓝桥杯真题|蓝桥杯2020第十一届C语言B组省赛习题题解——习题B.既约分数
- #|【毅力挑战】PCIe 每日一问一答
- 每日一练(31)(翻转单词顺序)
- VUE中鼠标滚轮使div左右滚动的方法详解
- 二分法的左右边界
- 每日一练(29)(和为s的两个数字)
- 数据结构|数据结构二叉树的基础操作( 1.创建二叉树2.先序遍历3.中序排序4.后序遍历 5.层序遍历6. 统计节点的数目 7.交换左右子树 8.计算并输出该二叉树的
- 深度学习|深度学习每日一问(为什么要对数据归一化(数据预处理))