剑指Offer_面试题58 - II. 左旋转字符串
Contents
题目
字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部。请定义一个函数实现字符串左旋转操作的功能。比如,输入字符串"abcdefg"和数字2,该函数将返回左旋转两位得到的结果"cdefgab"。
示例 1:
输入: s = "abcdefg", k = 2
输出: "cdefgab"
示例 2:
输入: s = "lrloseumgh", k = 6
输出: "umghlrlose"
限制:
1 <= k < s.length <= 10000
解答
解答1:利用substring()
方法
字符串相关方法复习
需要使用其中的获取子串的方法,substring(beginIndex,endIndex),分别取出前后两个子字符串,然后使用concat(s2)方法拼接起来即可。
class Solution {
public String reverseLeftWords(String s, int n) {
String s1 = s.substring(0,n);
String s2 = s.substring(n,s.length());
return s2.concat(s1);
}
}
熟练使用java的字符串相关的方法即可。
解答2:遍历字符串
如果不允许使用substring
方法,可以直接遍历。
class Solution {
public String reverseLeftWords(String s, int n) {
String res = "";
for(int i = n;i <= s.length() - 1;i++){
res += s.charAt(i);
}
for(int i = 0;i <= n - 1;i++){
res += s.charAt(i);
}
return res;
}
}
总结
思路比较简单,几乎不需要怎么思考就知道怎么做,但是在做的过程中还是发现自己的java基础太薄弱,比如上面写出来的资料,都是现查的。也就是说,目前来讲,让我查资料的话,我是可以完成的,但是假如面试的时候,由于存在着这些模棱两可的盲区,肯定效果不会很好。
解决方式是,刷一刷java教材的课后题,因为说白了还是熟练度不够,看书是没用的,必须都把这些东西敲一遍,才能形成深刻的记忆。