小夕的公众号发文方式
- 由于公众号的改版,如果不经常发文的话,小夕的读者朋友们会收不到小夕的写的文字,因此天天发文就很必要
- 但小夕的一篇漫画算法原创文章,大概需要5-10个小时的耗时,动画+漫画的那些图片制作起来非常费时间!
- 所以为了既天天发文,又能保持高质量的漫画算法原创文章的更新,现绝对用如下的发文方式
之前的原创动漫漫画算法文
戳一下即可进行跳转哦~
动漫算法:字节面试题太坑了,刚回答完,就被面试官diss了!
动漫算法:作业帮面试题:求一个数的二进制中1的个数
动漫算法:百度面试题:用两个栈实习一个队列
动漫算法:如何在二维数组中找到一个数?
动漫算法:美团面试题:根据前序序列和中序序列重建二叉树!
动漫算法:美团面试题,将链表逆序存放到数组中
动漫算法:腾讯面试题,请实现把字符串中的空格替换为“%20”
发文方式
- 小夕会天天更新文章,文章以小夕的每日在算法刷题群公布的题目的题解为主,另外每天小夕会在文章中聊一下在大厂百度(嗯~是的
小夕在百度工作
)的遇到的问题和一些工作经验(注意这些文章以每天刷题为主,所以这些文章第二天就会删除,所以请紧随小夕的步伐刷题,后续看情况再议,目前是决定当天发文,第二天删文) - 小夕的漫画算法原创文章会保持一周1-2篇的更新
- 这样小夕既能天天发文保持天天更新,又能保证高质量的算法原创文章了~
题目
字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部。请定义一个函数实现字符串左旋转操作的功能。比如,输入字符串"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/problems/zuo-xuan-zhuan-zi-fu-chuan-lcof
1.调用切片函数解法
思路
- 前n个字符串也就是0到n位的时候,放在后面;
- 剩余的字符串n到末尾的字符串,放到前面;
- 然后将二者进行拼接。
Java
class Solution {
public String reverseLeftWords(String s, int n) {
return s.substring(n, s.length()) + s.substring(0, n);
}
}
Python
class Solution:
def reverseLeftWords(self, s: str, n: int) -> str:
return s[n:] + s[:n]
JS
var reverseLeftWords = function(s, n) {
return s.substring(n) + s.substring(0,n)
};
复杂度
都是O(n)
2.原地反转法
当面试官不让我们使用切片函数呢?切片函数也就是substring 和 python中的s[n:]这种
原字符串反转[0,n-1]的字符串
反转[n,末尾]的字符串
整个字符串串来个大反转
可以看到 得到我们需要的左移2个字符到末尾
Java
class Solution {
public String reverseLeftWords(String s, int n) {
char[] chars = s.toCharArray();
if (chars.length return "";
}
reverse(chars, 0, n - 1); // 反转[0,n-1]个字符串 也就是前n个字符串
reverse(chars, n, chars.length - 1); // 反转[n,末尾]字符串串
reverse(chars, 0, chars.length - 1); // 来个整体的字符串反转
return new String(chars);
}
public void reverse(char[] chars, int start, int end) {
while (start char temp = chars[start];
chars[start] = chars[end];
chars[end] = temp;
start++;
end--;
}
}
}
C++
class Solution {
public:
string reverseLeftWords(string s, int n) {
int len=s.length();
if(0==len || 0==n)
return s;
string &temp=s;
reverse(temp,0,n-1); // 反转[0,n-1]个字符串 也就是前n个字符串
reverse(temp,n,len-1); // 反转[n,末尾]字符串串
reverse(temp,0,len-1); // 来个整体的字符串反转
return s;
}
void reverse(string &s,int start,int end)
{
char temp;
while(start {
temp=s[start];
s[start]=s[end];
s[end]=temp;
start++;
end--;
}
}
};
Python
class Solution(object):
def reverseLeftWords(self, s, n):
"""
:type s: str
:type n: int
:rtype: str
"""
if n > len(s) or not s:
return ''
s = list(s)
def reverse(start, end):
while start temp = s[start]
s[start] = s[end]
s[end] = temp
start += 1
end -= 1
length = len(s) - 1
reverse(0, n-1)
reverse(n,length)
reverse(0, length)
return ''.join(s)
小夕最后有话说
- 动画、漫画、加6种编程语言(Java、C++、PHP、GO、Python、JS)的讲解很费心血,希望大家能帮忙转发到朋友圈和身边的朋友,这样小夕的文章能让更多的人看见的话,小夕会更有动力更新文章的呀~。
- 公众号后台回复 打卡 查看公众号福利 坚持转发文章到朋友圈,小夕送上100元的红包给你,谢谢铁杆粉丝的支持。
- 加小夕微信 tiehanhan12342 拉你进算法刷题群。