4 回答

TA貢獻(xiàn)1796條經(jīng)驗(yàn) 獲得超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貢獻(xiàn)1982條經(jīng)驗(yàn) 獲得超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貢獻(xiàn)1884條經(jīng)驗(yàn) 獲得超4個贊
假設(shè)您有以下數(shù)組;[h, e, y, , y, o, u]你必須以一種模式工作;從外到內(nèi)(或相反)。因此,[1,2,3,4,3,2,1]您必須交換1and 1,2依此2類推。如您所見,該數(shù)組的長度為 7,在這種情況下,所需的交換量正好是 4(4與其自身交換)。要計(jì)算交換量,您可以簡單地將數(shù)組長度除以 ceil 2.0f。
現(xiàn)在你必須遍歷數(shù)組,交換那些索引。要計(jì)算要交換的索引,您必須檢查您的交換位置。假設(shè)您在第二次交換中,2數(shù)組中的索引是 1 和 5,的索引3是 2 和 4。您現(xiàn)在可能已經(jīng)識別出這種模式。第一個索引始終是已完成交換的數(shù)量,第二個是數(shù)組的長度減去 1 減去已完成交換的數(shù)量。
這是放入代碼的;
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));
}
編輯:我剛剛看到您要求反轉(zhuǎn) char[] 中的每個單詞,您可能想在第一句話中澄清這一點(diǎn)
去做這個; 我建議您使用String::split將字符串拆分為 string[] 并將String::toCharArray其更改為字符數(shù)組。雖然這確實(shí)創(chuàng)建了新的數(shù)組

TA貢獻(xiàn)1852條經(jīng)驗(yàn) 獲得超1個贊
有一個算法,如下,
最初,將給定字符串的單個單詞一一反轉(zhuǎn),對于提供的示例
"Perfect Makes Practice"
,在反轉(zhuǎn)單個單詞之后,字符串應(yīng)該是“tcefreP sekaM ecitcarP”
。"Practice Makes Perfect"
在上面的示例中,從頭到尾反轉(zhuǎn)整個字符串以獲得所需的輸出。
更多檢查Reverse words in a given string。
添加回答
舉報(bào)