説明:
文字列と整数kを考えると、あなたは文字列の先頭から数えておき2kの文字の最初のk個の文字を逆にする必要があります。左kよりも小さい文字がある場合は、それらのすべてを逆転。2K未満が、文字k個以上がある場合、最初のk個の文字を逆にし、元のような他を残しました。
例:
入力: S = "ABCDEFG"、K = 2 出力: "bacdfeg"
制限事項:
- 文字列は、下部のみ英文字で構成されています。
- 範囲で指定した文字列とK意志の長さ[1、10000]
溶液:
クラスソリューション{ パブリック文字列reverseStr(文字列s、int型K){ もし、(S == NULL || s.length()== 0 ){ リターン "" 。 } もし(K == 0 ){ リターンS。 } 整数 Z = 0 。 int型 TT = 0 ; もし((s.length()%(2 * K))!= 0 ){ TT = s.length()/(2 * K)+1 。 } 他 {TT = s.length()/(2 * K);} 文字列[] ST = 新しい文字列[TT]。 System.out.println(TT)。 以下のために(int型 i = 0; I <= s.length() - 2 * K、I = I + 2 * K){ ST [Z ++] = s.substring(I、iは+ 2 * K)。 } INT RES = s.length()%(2 * K)。 文字列の結果 =「」; 以下のために(int型 ; iはst.lengthを<I ++は、I = 0 ){ 場合(!ST [I] = NULL ) 結果 =結果+リバース(STは、[i]は.substring(0、K))+ ST [i]は。ストリング(K、2 * K)。 } 文字列の最後 = s.substring(Z * 2 * K、s.length())。 もし(RES> 0 ){ もし(RES> = K && RES <2 * K){ 結果 =結果+逆(last.substring(0 、K))。 文字列のTMP = "" ; 以下のために(int型私は= kは、iが(last.lengthを<); iは++ ){ TMP = TMP + last.charAt(I)。 } 結果 =結果+ TMP。 } 他{ 結果 =結果+ 逆(最後)。 } } 戻り値の結果; } パブリック文字列の逆(文字列s){ StringBufferのSB = 新しいStringBufferの(S)。 リターン 。sb.reverse()のtoString(); } }