滴滴秋招09-13 将字符串按指定长度反转

复盘

  • 反转子串的多种不熟练写法(写了双指针)
  • 主要是死在了没能够将字符串很好地切割为定长的子串

当时想到的是用一个for循环 i+=slen来截取,但是结果很长。原因是没能很好地控制截取的长度。
设置了cur变量但是没起到动态更新

//自己缺少了这一步,导致每次所都添加的是cur 的长度
if (cur > slen) cur = slen;

题目:

某X星人发明了一种加密方法,该加密方法是将一个明文字符串从左到右分割成若干个长度相等的子字符串(最后一个子字符串的长度可以不同),然后将每个子字符串中字符进行逆序,从而得到密文。
现在成功截取到X星人的密文并且猜到了X星人设置的长度,能否写一个程序将密文破解得到对应的明文呢?

输入用例

输入描述:

单组输入
每组测试数据的输入占两行,其中第一行包含一个正整数n,表示分割每个子字符串的长度;第二行为加密字符串S(S长度<=1000,n<=100)
密文可能包含英文大小写字母,数字,空格和英文标点符号。

输出描述:
每组测试数据的输出占一行,表示破解密文后得到的明文。

样例输入:
2
gogogoout

样例输出:
ogogoguot

思路:

  • 按指定长度先分割子字符串
  • 反转子串
package sept13.didi;

import java.util.*;

/**
 * @Author: iqqcode
 * @Date: 2020-09-14 09:53
 * @Description: 样例输入:
 * 2
 * gogogoout
 * 

* 样例输出: * ogogoguot */ public class Topic01 { public static void main(String[] args) { Scanner in = new Scanner(System.in); int slen = in.nextInt(); String str = in.next(); int len = str.length(); String tmp1 = solutionI(slen, str); System.out.println(tmp1); String tmp2 = solutionII(slen, str); System.out.println(tmp2); } //【方法一】: for循环处理 private static String solutionI(int slen, String str) { StringBuilder sb = new StringBuilder(); int len = str.length(); for (int i = 0; i < str.length(); i += slen) { int cur = len - i; //自己缺少了这一步,导致每次所都添加的是cur 的长度 if (cur > slen) cur = slen; sb.append(reverse(str.substring(i, i + cur))); } return sb.toString(); } //【方法二】: while循环处理 private static String solutionII(int slen, String str) { StringBuilder sb = new StringBuilder(); int start = 0, end = slen; String temp = null; while (start < str.length()) { if (end > str.length()) { end = str.length(); } temp = reverse(str.substring(start, end)); sb.append(temp); start = end; end += slen; } return sb.toString(); } //字符串反转,异或更高效 private static String reverse(String s) { char[] chars = s.toCharArray(); int len = s.length(); int half = (int) Math.ceil(len / 2); for (int i = 0; i < half; i++) { chars[i] ^= chars[len - 1 - i]; chars[len - 1 - i] ^= chars[i]; chars[i] ^= chars[len - 1 - i]; } return String.valueOf(chars); } }

你可能感兴趣的:(#,【笔试题目】,字符串)