匯編語言中有一種移位指令叫做循環(huán)左移(rol),現(xiàn)在有個(gè)簡(jiǎn)單的任務(wù),就是用字符串模擬這個(gè)指令的運(yùn)算結(jié)果。對(duì)于一個(gè)給定的字符序列s,請(qǐng)你把其循環(huán)左移k位后的序列輸出。例如,字符序列s=”abcxyzdef”,要求輸出循環(huán)左移3位后的結(jié)果,即“xyzdefabc”。是不是很簡(jiǎn)單?ok,搞定它!
代碼
解法一
最直觀的方式,依次將需要移位的字符移動(dòng)至最后,但是每個(gè)字符都需要移動(dòng)數(shù)組的長(zhǎng)度-1,如果數(shù)組的長(zhǎng)度是n,需要移k位,則總共需要移動(dòng) k * (n - 1)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
public static string leftrotatestring(string str, int n) { if (strings.isnullorempty(str)) { return str; } if (n < 0 || n >= str.length()) { return str; } char [] strarray = str.tochararray(); while (n-- > 0 ){ // 直接交換的方式,將需要移位的部分通過交換n-1次向左移動(dòng) // 比如abcde,要移動(dòng)2位,即cdead // 1. 將a移動(dòng)至最后,此時(shí)是bcdea // 2. 將b移動(dòng)至最后,此時(shí)是cdeab for ( int i = 0 ; i < strarray.length - 1 ; i++) { swap(strarray, i, i + 1 ); } } return new string(strarray); } private static void swap( char [] str, int i, int j) { char temp = str[i]; str[i] = str[j]; str[j] = temp; } |
解法二
借助字符串的反轉(zhuǎn),比如“ab”對(duì)應(yīng)“ba”,“xyz”對(duì)應(yīng)“zyx”,總共需要三步即可得到期望想過
- 反轉(zhuǎn)要移位的部分,”abcxyzdef”操作后是”cbaxyzdef”
- 反轉(zhuǎn)其余的部分,”cbaxyzdef”操作后是”cbafedzyx”
- 反轉(zhuǎn)整個(gè)字符串,”cbafedzyx”操作后是”xyzdefabc”
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
|
public static string leftrotatestring2(string str, int n) { if (strings.isnullorempty(str)) { return str; } if (n < 0 || n >= str.length()) { return str; } char [] strarray = str.tochararray(); // 借助反轉(zhuǎn),分三步 // 1. 反轉(zhuǎn)要移位的部分 // 2. 反轉(zhuǎn)其余部分 // 3. 整體反轉(zhuǎn) reverse(strarray, 0 , n - 1 ); reverse(strarray, n, strarray.length - 1 ); reverse(strarray, 0 , strarray.length - 1 ); return new string(strarray); } /** * 反轉(zhuǎn)字符串,兩端依次進(jìn)行交換即完成反轉(zhuǎn) * @param str * @param start * @param end */ private static void reverse( char [] str, int start, int end) { while (start < end) { swap(str, start, end); start++; end--; } } private static void swap( char [] str, int i, int j) { char temp = str[i]; str[i] = str[j]; str[j] = temp; } |
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持服務(wù)器之家。
原文鏈接:https://blog.csdn.net/zl18310999566/article/details/80250653