題目描述
??字符串的左旋轉(zhuǎn)操作是把字符串前面的若干個(gè)字符轉(zhuǎn)移到字符串的尾部跟继。請(qǐng)定義一個(gè)函數(shù)實(shí)現(xiàn)字符串左旋轉(zhuǎn)操作的功能。比如,輸入字符串"abcdefg"和數(shù)字2挎挖,該函數(shù)將返回左旋轉(zhuǎn)兩位得到的結(jié)果"cdefgab"。
示例 1:
輸入: s = "abcdefg", k = 2
輸出: "cdefgab"
示例 2:
輸入: s = "lrloseumgh", k = 6
輸出: "umghlrlose"
限制:
1 <= k < s.length <= 10000
來(lái)源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/zuo-xuan-zhuan-zi-fu-chuan-lcof
??這道題本身非常簡(jiǎn)單航夺,如果用substring方法一行代碼就可以解決蕉朵,但是要理解其中原理。代碼如下:
解題思路一
public String reverseLeftWords(String s, int n) {
return s.substring(n)+s.substring(0,n);
}
提交到LeetCode的運(yùn)行結(jié)果如下:
解題思路二
在LeetCode上有這樣一行代碼阳掐,個(gè)人感覺(jué)比較有意思:
public String reverseLeftWords(String s, int n) {
return (s+s).substring(n,n+s.length());
}
提交到LeetCode的運(yùn)行結(jié)果如下:
??這個(gè)解題思路可能與常人思維不太一樣始衅,可以參考。
解題思路三
??如果不能直接用字符串拼接的方法锚烦,可以嘗試使用字符拼接的方式進(jìn)行操作觅闽,代碼如下:
class Solution {
public String reverseLeftWords(String s, int n) {
String res = "";
for(int i = n; i < n + s.length(); i++)
res += s.charAt(i % s.length());
return res;
}
}
算法原理
??看到題目,這里第一時(shí)間聯(lián)想到的是單項(xiàng)隊(duì)列的原理涮俄,如果例用純算法思想蛉拙,將字符串中每個(gè)字符從一端存入隊(duì)列中,將前n個(gè)字符依次從另一端取出后再依次存入隊(duì)列中即可彻亲。圖解如下: