某书2018提前批笔试题之翻转字符串
一、题目
将每2k个字符的前k个翻转;如果少于k,则翻转全部字符;如果多于k少于2k,则翻转前k个,剩余保持不变。
二、思路
递归2k个字符串
三、代码
package redbook; import java.util.*; public class Main1 { public static void main(String[] args) { //输入字符串 Scanner in = new Scanner(System.in); while (in.hasNext()) { String str = in.nextLine(); int k = in.nextInt(); String result = revs(str, k); System.out.println(result); } in.close(); } public static String revs(String str, int k) { int len = str.length(); //String转换成SStringBuffer StringBuffer sb = new StringBuffer(); sb.append(str); //如果k=0,直接返回结果 if (k == 0) { return str; } //分字符串长度<=k,>k&&<2*k,>=2k三种情况讨论 if (len <= k) { sb.reverse(); return sb.toString(); } else if (len > k && len < 2 * k) { StringBuffer sb2 = new StringBuffer(); String tempStr1 = sb.substring(0, k); sb2.append(tempStr1); sb2.reverse(); String tempStr2 = sb.substring(k, len); sb2.append(tempStr2); return sb2.toString(); } else if (len >= 2 * k) { StringBuffer sb3 = new StringBuffer(); String tempStr3 = sb.substring(0, k); sb3.append(tempStr3); sb3.reverse(); String tempStr4 = sb.substring(k, 2 * k); sb3.append(tempStr4); String tempStr5 = sb.substring(2 * k); return sb3.append(revs(tempStr5, k)).toString(); } return str; } }
--------------------------------------------
参考链接:
http://blog.csdn.net/yingzizizizizizzz/article/details/75452291