4 回答
TA贡献1796条经验 获得超7个赞
这绝对不是一个好的解决方案,但它是一个有效的解决方案。
class Main {
public static void main(String[] args) {
char[] charArr = new char[] { 'P', 'e', 'r', 'f', 'e', 'c', 't', ' ', 'M', 'a', 'k', 'e', 's', ' ', 'P', 'r',
'a', 'c', 't', 'i', 'c', 'e' };
System.out.println(charArr);
reverseCharArray(charArr,0);
System.out.println(charArr);
}
public static void reverseCharArray(char[] charArr, int sorted) {
/* Look for last space*/
int lastSpace = -1;
for (int i = 0; i < charArr.length; i++) {
if (charArr[i] == ' ') {
lastSpace = i;
}
}
/* Grab the word and move it at the beginning of the sorted array */
for (int i = lastSpace + 1; i < charArr.length; i++) {
int k = i;
while (k != sorted) {
char tmp = charArr[k-1];
charArr[k-1] = charArr[k];
charArr[k] = tmp;
k--;
}
sorted++;
}
/* At this point, the last character is a space*/
/* Else, we've swapped all the words */
int k = charArr.length - 1;
if (charArr[k] != ' ') {
return;
}
/* If it's a space, grab it and move it at the beginning*/
while (k != sorted) {
char tmp = charArr[k-1];
charArr[k-1] = charArr[k];
charArr[k] = tmp;
k--;
}
sorted++;
/*Recursive call on the not sorted array*/
reverseCharArray(charArr,sorted);
}}
TA贡献1982条经验 获得超2个赞
下面的方法交换间隔。请注意,它们必须具有相同的长度。
public static char[] swap(char[] arr, int lstart, int rstart, int len){
for(int i=lstart; i<lstart+len; i++){
char temp = arr[i];
arr[i] = arr[rstart+i];
arr[rstart+i] = temp;
}
return arr;
}
TA贡献1884条经验 获得超4个赞
假设您有以下数组;[h, e, y, , y, o, u]你必须以一种模式工作;从外到内(或相反)。因此,[1,2,3,4,3,2,1]您必须交换1and 1,2依此2类推。如您所见,该数组的长度为 7,在这种情况下,所需的交换量正好是 4(4与其自身交换)。要计算交换量,您可以简单地将数组长度除以 ceil 2.0f。
现在你必须遍历数组,交换那些索引。要计算要交换的索引,您必须检查您的交换位置。假设您在第二次交换中,2数组中的索引是 1 和 5,的索引3是 2 和 4。您现在可能已经识别出这种模式。第一个索引始终是已完成交换的数量,第二个是数组的长度减去 1 减去已完成交换的数量。
这是放入代码的;
public static void swap(char[] array){
int totalSwaps = (int) Math.ceil(array.length / 2.0f);
for(int currentSwaps = 0; currentSwaps < totalSwaps; currentSwaps++){
char char1 = array[currentSwaps];
int position2 = array.length - (currentSwaps + 1);
array[currentSwaps] = array[position2];
array[position2] = char1;
}
System.out.println(Arrays.toString(array));
}
编辑:我刚刚看到您要求反转 char[] 中的每个单词,您可能想在第一句话中澄清这一点
去做这个; 我建议您使用String::split将字符串拆分为 string[] 并将String::toCharArray其更改为字符数组。虽然这确实创建了新的数组
TA贡献1852条经验 获得超1个赞
有一个算法,如下,
最初,将给定字符串的单个单词一一反转,对于提供的示例
"Perfect Makes Practice"
,在反转单个单词之后,字符串应该是“tcefreP sekaM ecitcarP”
。"Practice Makes Perfect"
在上面的示例中,从头到尾反转整个字符串以获得所需的输出。
更多检查Reverse words in a given string。
添加回答
举报