劍指offer—58_2.左旋轉字串—分析及程式碼(Java)
一、題目
組合語言中有一種移位指令叫做迴圈左移(ROL),現在有個簡單的任務,就是用字串模擬這個指令的運算結果。對於一個給定的字元序列S,請你把其迴圈左移K位後的序列輸出。例如,字元序列 S = “abcXYZdef”,要求輸出迴圈左移 3 位後的結果,即 “XYZdefabc”。是不是很簡單?OK,搞定它!
二、分析及程式碼
1. 兩次翻轉
(1)思路
類似 “58.翻轉單詞順序列” 的思路,先分別翻轉前 k 位和其他部分的字串,再對字串整體進行二次翻轉,即實現目標。
(2)程式碼
public class Solution {
public String LeftRotateString(String str,int n) {
if (str.length() == 0 || n <= 0)
return str;
String ans = ReverseStr(str, 0, n - 1) + ReverseStr(str, n, str.length() - 1);
return ReverseStr(ans, 0, str.length() - 1);
}
public String ReverseStr(String str, int l, int r) {
String revStr = new String();
for (int i = r; i >= l; i--)
revStr = revStr.concat(String.valueOf(str.charAt(i)));
return revStr;
}
}
(3)結果
執行時間:23ms,佔用記憶體:9492k。
2. 直接拼接
(1)思路
如果允許使用輔助空間,直接對原字串進行拼接即可。
(2)程式碼
public class Solution {
public String LeftRotateString(String str,int n) {
if (str.length() == 0 || n <= 0)
return str;
return str.substring(n) + str.substring(0, n);
}
}
(3)結果
執行時間:19ms,佔用記憶體:9680k。
三、其他
暫無。
相關文章
- 【劍指offer】左旋轉字串字串
- 《劍指offer》:[42-1]左旋轉字串字串
- 劍指offer—49.醜數—分析及程式碼(Java)Java
- 劍指offer—58.翻轉單詞順序列—分析及程式碼(Java)Java
- 【劍指offer】字串轉整數字串
- 劍指offer(Java版)--將字串轉換為整數Java字串
- 【劍指offer】字串的排列字串
- 《劍指offer》:[49]把字串轉化成整數字串
- 【劍指offer】【2】字串的空格字串
- 【劍指offer】字串的組合字串
- 劍指 Offer 38. 字串的排列字串
- 劍指Offer 表示數值的字串字串
- 劍指offer——把字串轉換成整數C++字串C++
- 劍指offer-字串空格替換為“ ”字串
- 《劍指offer》:[54]表示數值的字串字串
- 【劍指offer】替換字串中的空格字串
- 劍指Offer系列之「表示數值的字串」字串
- 力扣 - 劍指 Offer 67. 把字串轉換成整數力扣字串
- 劍指offer解析-下(Java實現)Java
- 劍指offer解析-上(Java實現)Java
- 《Leetcode of December》劍指 Offer 67. 把字串轉換成整數LeetCode字串
- [劍指offer][第四章][28]字串的排列字串
- 劍指offer面試16 反轉連結串列面試
- 劍指offer-JavaScript版JavaScript
- 劍指Offer題解合集
- 每日一練(32):左旋轉字串字串
- 【劍指offer】10.程式的完整性
- 《劍指offer》JAVA題解,LeetCode評測JavaLeetCode
- 劍指offer面試題(41-50)——java實現面試題Java
- 劍指offer:旋轉陣列的最小數字陣列
- 劍指offer 旋轉陣列的最小數字陣列
- 【劍指offer】旋轉陣列的最小值陣列
- 劍指Offer:JZ30-連續子陣列最大和(解題思路+Java程式碼)陣列Java
- 劍指 Offer 48. 最長不含重複字元的子字串字元字串
- 【劍指offer】刪除在另一個字串中出現的字元字串字元
- 劍指 offer(1) -- 陣列篇陣列
- Leetcode劍指offer(八)LeetCode
- 劍指offer刷題記錄