给定一个字符串和一个整数 k,你需要对从字符串开头算起的每 2k 个字符的前k个字符进行反转。
如果剩余少于 k 个字符,则将剩余的所有全部反转。如果有小于 2k 但大于或等于 k 个字符,
则反转前 k 个字符,并将剩余的字符保持原样。
示例:
输入: s = "abcdefg", k = 2
输出: "bacdfeg"
题的意思是:定义一个StringBuilder 对象sb,调用append方法添加字符,定义一个i变量,用来指定当前下标,首先让它指向第一个字符,
(1)如果i+2*k小于字符串长度,那么将前k个字符逆转,i+k到2*k之间不变,直接调用append方法添加。(1)不成立,进行(2)。
(2)如果i+k小于字符串长度,将下标从i到k之间的字符逆转,然后从i+k下标到字符串长度-1的下标之间元素不变,直接调用append方法添加。(2)不成立,进行(3)。
(3)直接从i下标开始到字符串末尾逆转后调用append方法添加
代码如下:
public static String reverseStr(String s, int k) { StringBuilder sb = new StringBuilder(); for(int i = 0;i<s.length();i += 2*k) { if(i + 2*k < s.length()) { sb.append(reserve(s.substring(i, i+k))); sb.append(s.substring(i+k,i+2*k)); }else if(i+k<s.length()) { sb.append(reserve(s.substring(i, i+k))); sb.append(s.substring(i+k,s.length())); }else { sb.append(reserve(s.substring(i,s.length()))); } } return new String(sb); } public static String reserve(String str) { char[] chars = str.toCharArray(); int start = 0; int end = chars.length - 1; while(start<end) { char tmp = chars[start]; chars[start] = chars[end]; chars[end] = tmp; start++; end--; } return new String(chars); }