leetcode 541.反転文字列II
1328 ワード
タイトルの説明:
文字列と整数kを指定すると、文字列の先頭から計算された2 k文字ごとに最初のk文字を反転する必要があります.残りがk文字未満の場合、残りのすべてが反転します.2 k未満でk以上の文字がある場合は、前のk文字を反転し、残りの文字をそのままにします.
例:
要件:この文字列には、小文字の英字のみが含まれています. 所与の文字列の長さおよびkは[1,10000]の範囲内である.
コード:
文字列と整数kを指定すると、文字列の先頭から計算された2 k文字ごとに最初のk文字を反転する必要があります.残りがk文字未満の場合、残りのすべてが反転します.2 k未満でk以上の文字がある場合は、前のk文字を反転し、残りの文字をそのままにします.
例:
: s = "abcdefg", k = 2
: "bacdfeg"
要件:
コード:
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();
}
}