描述:
給定一個字符串(以字符數組的形式給出)和一個偏移量,根據偏移量原地旋轉字符串(從左向右旋轉)
樣例:
輸入: str="abcdefg", offset = 3
輸出: str = "efgabcd"
樣例解釋: 注意是原地旋轉,即str旋轉后為"efgabcd"
......
解題:
難點分析: ①字符串為 "" 的情況
②偏移量 offset = 0
③偏移量 offset 遠大於字符串長度
前兩種情況直接return就行了, 畢竟不要求發生改變; 第三種情況難以想到, 想到就很簡單了, 實際偏移量就是 offset%(字符串長度)
由於本人能力很弱, 只能用比較傻的方法, 思路簡單, 供與初學者. 網上還有一堆花里胡哨的方法, 都看不懂, 有的只能看懂思路, 代碼看不懂,😫
public void rotateString(char[] str, int offset) { // write your code here if(str.length == 0 || offset == 0){ return; } offset = offset%str.length;//實際偏移量 for(int i = 0;i<offset; i++){ char temp = str[str.length-1]; for(int j = str.length-1;j>0;j--){ str[j] = str[j-1]; } str[0] = temp; } }
核心思想非常簡單, 就在兩層for循環中, 第一層for循環是偏移的次數, 第二層for循環實現偏移.
在數組中利用下標的后一個等於前一個, 實現數組向右偏移一位, 需要的僅是把數組第一個數預先存儲下來.