剣はoffer-58_2を指します。左回転文字列-分析とコード[Java]
1.タイトル
アセンブリ言語には、左回転(ROL)と呼ばれるシフト命令があります。これで、この命令の結果を文字列でシミュレートするという簡単なタスクがあります。与えられた文字シーケンスSについて、それをKビット左に循環シフトした後にシーケンスを出力してください。たとえば、文字シーケンスS = "abcXYZdef"の場合、3ビット左の循環シフトの結果、つまり "XYZdefabc"を出力する必要があります。簡単じゃないですか。OK、やりなさい!
2、分析とコード
1.2回のフリップ
(1)考える
「58.単語シーケンスを逆にする」のアイデアと同様に、最初に文字列の最初のkビットと他の部分をそれぞれ反転し、次に文字列全体を2回反転して目標を達成します。
(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。
3、その他
何もありません。