leetcode 541.反転文字列II


タイトルの説明:
文字列と整数kを指定すると、文字列の先頭から計算された2 k文字ごとに最初のk文字を反転する必要があります.残りがk文字未満の場合、残りのすべてが反転します.2 k未満でk以上の文字がある場合は、前のk文字を反転し、残りの文字をそのままにします.
例:
  : s = "abcdefg", k = 2
  : "bacdfeg"

要件:
  • この文字列には、小文字の英字のみが含まれています.
  • 所与の文字列の長さおよびkは[1,10000]の範囲内である.

  • コード:
    class Solution {
        public String reverseStr(String s, int k) {
            StringBuilder sb=new StringBuilder();
            int i;
            for(i=0;i+2*k<=s.length();i=i+2*k){
                // StringBuilder tmp=s.substring(i,i+k);System.out.println(tmp);
                // String tmp1=tmp.reverse();
                sb.append(new StringBuilder(s.substring(i,i+k)).reverse());//reverse() StringBuilder   ,String   。
                sb.append(s.substring(i+k,i+2*k));
            }
            int len=s.length()-i;//       s.length()-1,    len=(s.length()-1-i)+1=s.length()-i;
            if(len==0){//           2k  ,  i==s.length();
                ;
            }else if(len<=k){//                k,      。
                sb.append(new StringBuilder(s.substring(i,i+len)).reverse());
            }else{//        (k,2k),      。
                sb.append(new StringBuilder(s.substring(i,i+k)).reverse()).append(s.substring(i+k,s.length()));
            }
            return sb.toString();
        }
    }