今天是个好日子!我正在解决一个问题,其本质如下:该方法被赋予一个字符串String text和一个数字int n。所有这些数据都以最终状态传输。有必要将文本中的所有偶数字符与奇数字符分开,并按照n中给出的次数执行此操作。如果 n=0 或 -n,则什么也不做。
例如,“这是一个测试!” 对于 n=1 ---> “hsi etTi 坐下!” , 并且对于 n=2 *"s eT ashi tist!"* 等等。容我们说,这种排列应该是 n 次。
经过一番头脑风暴,我想出了以下几点:
public static String encrypt(final String text, final int n){
String result ="";
int t = n;// временная переменная t для подсчета кол-ва проходов шифрования
Character [] textArr = new Character[text.length()];
for (int i = 0;i<text.length();i++){
textArr[i] = text.charAt(i);
}
List<Character> charArr = Arrays.asList(textArr);
List<Character> oddCharArr = new ArrayList<>();
List<Character> evenCharArr = new ArrayList<>();
List<Character> tempCharArr = new ArrayList<>(charArr);
for (int i = 0; i < tempCharArr.size(); i++) {
if (i % 2 == 0) {
evenCharArr.add(tempCharArr.get(i));
} else oddCharArr.add(tempCharArr.get(i));
tempCharArr.addAll(oddCharArr);
tempCharArr.addAll(evenCharArr);
}
这个想法是将字符串分成一个数组Char,然后遍历这个数组并将所有偶数和奇数字符分成两个额外的字符。大批。之后,将最终数组转换为字符串。就我而言,我是通过List来完成的。
这种改变似乎奏效了。数组被正确收集,但只收集一次。
试图用while来做,但没有成功。告诉我,我怎样才能更好、更有效地执行此操作n次?
紧接着的问题是赶上,在另一种方法中,有必要按原样返回所有内容。告诉我,或者至少提示算法如何做到这一点:)
先感谢您!
UPD(德米特里·阿列克申科):
public static String encrypt(final String text, final int n) {
String result ="";
int t = n;// временная переменная t для подсчета кол-ва проходов шифрования
Character [] textArr = new Character[text.length()];
for (int i = 0;i<text.length();i++){
textArr[i] = text.charAt(i);
}
List<Character> charArr = Arrays.asList(textArr);
List<Character> oddCharArr = new ArrayList<>();
List<Character> evenCharArr = new ArrayList<>();
List<Character> tempCharArr = new ArrayList<>();
for (int i = 0; i < charArr.size(); i++) {
if (i % 2 == 0) {
evenCharArr.add(charArr.get(i));
} else oddCharArr.add(charArr.get(i));
}
tempCharArr.addAll(oddCharArr);
tempCharArr.addAll(evenCharArr);
System.out.println(tempCharArr.toString());
return result;
}
我希望得到帮助))上面我发布了有效的代码,但只有一次。
现在我们需要让它做这个排列给定的次数。这是我遇到问题的地方。我忍受了一个星期的头,然后陷入了无休止的循环)
你至少能提出实现这一点的最佳方法吗?总的来说很悲伤
我想你可以试试这样的
作为替代方案,我将提出这样一种方法——我们不是多次重新塑造字符串,而是计算每个字符
n在转换后会落下的位置,并立即将其放在正确的位置。反向转换也可以做到这一点。我注意到对于每个字符串长度都有一个值
p(这里是),字符串返回到它的初始状态,所以原则上对于大字符串n你可以进行n%p转换,但是哦,这p不是微不足道的。Python中的原理演示: