旋轉字串
描述
給定一個字串和一個偏移量,根據偏移量偏移字串(從左向右偏移)
樣例
對於字串 "abcdefg"
.
offset=0 => "abcdefg"
offset=1 => "gabcdef"
offset=2 => "fgabcde"
offset=3 => "efgabcd"
挑戰
在陣列上原地旋轉,使用O(1)的額外空間
解題思路
首先從在一個巨集觀的角度來看,偏移會把後幾個字元移動到整個字串的開頭,比如"offset=1 => "gabcdef" 會把 g 移動到字串的開頭,"offset=3 => "efgabcd"會把 efg 移動到字串的開頭。這樣來看,有點類似於反轉陣列。所以我們先反轉整個字串。
// 原字串
str = "abcdefg"
// 反轉後
str = "gfedcba"
但是在反轉後,字元的順序出現了變化,變成了區域性逆序的陣列了,因此我們需要對原先的後幾個字元和前幾個字元分別再做一個逆序。
// 假設offset = 3, 原字元
str = "abcdefg"
// 反轉後
str = "gfedcba"
// 對前3個字元再做一個逆序
str = "efgdcba"
// 對後4個字元再做一次逆序
str + "efgabcd"
原始碼
public class Solution
{
public static void rotateString(char[] str, int offset)
{
if(str == null || str.length == 0 || offset % str.length == 0)
return;
// 這裡考慮到offset 大於 str.length的情況
// 例如str.length = 7 offset = 9
// 實際上每個字元實際偏移的長度是2
offset = offset % str.length;
reverse(str, 0, str.length-1); // 先對整個字串做反轉
reverse(str, 0, offset-1); // 對前幾個字元做區域性反轉
reverse(str, offset, str.length-1); // 對後幾個字元做區域性反轉
}
public static void reverse(char[] str, int start, int end)
{
for(int i = start, j = end; i < j; i++, j--)
{
char temp = str[i];
str[i] = str[j];
str[j] = temp;
}
}
}
相關文章
- 字串相關演算法1-字串旋轉字串演算法
- 【LeetCode】796. 旋轉字串LeetCode字串
- [CareerCup] 1.8 String Rotation 字串的旋轉字串
- 第五章 字串專題 ---------------- 5.7 題解:旋轉詞字串
- 旋轉變換(一)旋轉矩陣矩陣
- Java演算法面試題(003) 如何檢查一個字串是另外一個字串的旋轉字串Java演算法面試題字串
- 旋轉相簿
- 將圖片旋轉(這裡不是旋轉imageView)View
- 三維座標系旋轉——旋轉矩陣到旋轉角之間的換算矩陣
- 旋轉矩陣矩陣
- 矩陣旋轉矩陣
- Activity的旋轉
- 三維旋轉:旋轉矩陣,尤拉角,四元數矩陣
- CSS3動畫(360度旋轉、旋轉放大、放大、移動)CSSS3動畫
- 利用三維旋轉矩陣在空間中旋轉平面矩陣
- | / - 的旋轉效果實現(轉)
- 旋轉演算法演算法
- SVG矩形旋轉動畫SVG動畫
- 卡片旋轉動畫效果動畫
- ubuntu螢幕旋轉Ubuntu
- 旋轉連結串列
- 剛體在三維空間的旋轉(關於旋轉矩陣、DCM、旋轉向量、四元數、尤拉角)矩陣
- 如何實現圖片的3D旋轉,而且是不停旋轉?3D
- canvas 圍繞中心旋轉Canvas
- orientationchange 螢幕旋轉事件事件
- SVG 旋轉文字字元SVG字元
- LeetCode:旋轉影像LeetCode
- html中圖片旋轉HTML
- 旋轉矩陣推導矩陣
- 箭頭旋轉程式碼
- cad旋轉的快捷鍵命令 cad旋轉方向怎麼調整
- 簡單的css3頭像旋轉與3D旋轉效果CSSS33D
- 三維空間 旋轉矩陣 四元數 尤拉角 相互轉換 組合旋轉矩陣
- JAVA字串轉日期或日期轉字串Java字串
- 快影app怎麼旋轉影片?快影影片瞬間旋轉的方法教程APP
- 怎麼旋轉圖片?BenVista PhotoZoom Pro旋轉圖片的方法OOM
- 三維重建學習(1):基礎知識:旋轉矩陣與旋轉向量矩陣
- 字串 (轉)字串