剣はオファーを指します—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、その他

何もありません。

おすすめ

転載: blog.csdn.net/zml66666/article/details/112040828
おすすめ