某书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;
    }
}  
View Code

--------------------------------------------

参考链接:

http://blog.csdn.net/yingzizizizizizzz/article/details/75452291

posted @ 2017-10-24 10:17  AI菌  阅读(354)  评论(0编辑  收藏  举报