字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部。请定义一个函数实现字符串左旋转操作的功能。比如,输入字符串"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
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
class Solution {
public String reverseLeftWords(String s, int n) {
return s.substring(n) + s.substring(0,n);
}
}
使用Java实现;本来想用python,但是系统给出的函数头自己便没看懂,所以python版本的就引用别人的代码吧。
这个题目就是对于字符串进行操作,所以需要对于字符串的裁剪,拼接这些常用函数比较熟悉。
str.substring(int beginIndex, int endIndex)
String sb = "53285964@qq.com";
String str = sb.substring(0, sb.indexOf("@"));
System.out.println(str); // 结果:53285964
// indexOf(String str)方法返回的是子字符串第一次出现在字符串的索引位置
// 上面的代码返回的是@前面的字符。
我们用 s + s 拼成一个两倍长度的字符串, 这样s[k:n + k] 就是我们要求的结果。
这个方法的缺点就是多占据了一倍的空间。时空复杂度都是 O(N)
def reverseLeftWords(self, s: str, k: int) -> str:
:
)和返回值注释(->
)。意思是 s 需要的类型是 str,k 需要的类型是 int。最后的 -> int
代表返回值是 str 类型。class Solution:
def reverseLeftWords(self, s: str, k: int) -> str:
n = len(s)
s = s + s
return s[k:n + k]
作者:fe-lucifer
链接:https://leetcode-cn.com/problems/zuo-xuan-zhuan-zi-fu-chuan-lcof/solution/chao-jian-dan-duo-chong-jie-fa-python3-by-azl39798/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
针对上面多占据了一倍空间的方法,我们可以虚拟的接上一个新字符串,也就是使用取模的方法进行循环。
时间复杂度为 O(N);空间复杂度为 O(1)
class Solution:
def reverseLeftWords(self, s: str, k: int) -> str:
n = len(s)
res = ‘‘
for i in range(k, k + n):
res += s[i % n]
return res
作者:fe-lucifer
链接:https://leetcode-cn.com/problems/zuo-xuan-zhuan-zi-fu-chuan-lcof/solution/chao-jian-dan-duo-chong-jie-fa-python3-by-azl39798/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
C语言的执行速度和内存会更胜一筹。下面放一个参考代码。
char* reverseLeftWords(char* s, int n){
int len = strlen(s),i = 0;
char *ans = malloc(sizeof(char) * (len + 1));
while(i < len){
*(ans++) = s[(n + i++)%len]; // 使用了上面的取模方法解决的,尤其注意优先级!
}
*ans= ‘\0‘;
return ans - len;
}
作者:ning-junzhi
链接:https://leetcode-cn.com/problems/zuo-xuan-zhuan-zi-fu-chuan-lcof/solution/cjian-dan-yi-dong-de-jie-fa-by-ning-junzhi/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
char* reverseLeftWords(char* s, int n){
int len = strlen(s), k = 0;
char *res = malloc((len+1)*sizeof(char)); // 新建一个长度 len+1 的内存空间res,类型为char
char *p = s + n; // 指针p指向 s+n 位置
for(int i = 0; i < len - n; i++){
res[k++] = p[i]; // 把指针p之后的内容先放到 res 中
}
for(int i = 0; i < n; i++){
res[k++] = s[i]; // 将s的头部内容放入 res 中
}
res[k] = ‘\0‘; // res 最后一位置为结束标志
return res;
}
作者:newpp
链接:https://leetcode-cn.com/problems/zuo-xuan-zhuan-zi-fu-chuan-lcof/solution/cjie-fa-li-yong-xin-zhi-zhen-ding-wei-shuang-100-b/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
原文:https://www.cnblogs.com/rongyupan/p/12629679.html