這是悅樂書的第259次更新饿这,第272篇原創(chuàng)
01 看題和準(zhǔn)備
今天介紹的是LeetCode算法題中Easy級別的第126題(順位題號是557)眠寿。給定一個字符串,您需要反轉(zhuǎn)句子中每個單詞中的字符順序,同時仍保留空格和初始單詞順序贝奇。例如:
輸入:“Let's take LeetCode contest”
輸出:“s'teL ekat edoCteeL tsetnoc”
注意:在字符串中航棱,每個單詞由單個空格分隔睡雇,并且字符串中不會有任何額外的空格。
本次解題使用的開發(fā)工具是eclipse饮醇,jdk使用的版本是1.8它抱,環(huán)境是win7 64位系統(tǒng),使用Java語言編寫和測試朴艰。
02 第一種解法
將s按照空格拆分為字符串?dāng)?shù)組观蓄,然后對數(shù)組中的每一個元素做翻轉(zhuǎn),再以空格拼接祠墅,作為結(jié)果返回侮穿。
public String reverseWords(String s) {
String[] arr = s.split(" ");
StringBuilder result = new StringBuilder();
for (int i=0; i<arr.length; i++) {
String ss = arr[i];
StringBuilder sb = new StringBuilder(ss);
sb.reverse();
arr[i] = sb.toString();
if (i == arr.length-1) {
result.append(arr[i]);
} else {
result.append(arr[i]+" ");
}
}
return result.toString();
}
03 第二種解法
對于第一種解法我們還可以再優(yōu)化下。
public String reverseWords2(String s) {
String[] arr = s.split(" ");
StringBuilder result = new StringBuilder();
for (String ss : arr) {
result.append(new StringBuilder(ss).reverse().toString()+" ");
}
return result.toString().trim();
}
04 第三種解法
我們也可以直接在字符串內(nèi)部進行操作毁嗦。將以空格分割開的單個單詞為一個對象亲茅,對其中的字符進行互換。先將s轉(zhuǎn)為字符數(shù)組狗准,如果當(dāng)前字符不為空格克锣,索引就繼續(xù)向后移動,直到遇到空格為止腔长,此時我們獲取了第一個單詞組成的字符的起始索引袭祟,再使用一次循環(huán),將其字符進行反轉(zhuǎn)捞附,然后將索引還原榕酒。最后將字符數(shù)組轉(zhuǎn)為字符串返回即可胚膊。
public String reverseWords3(String s) {
char[] arr = s.toCharArray();
for (int i=0; i<arr.length; i++) {
if (arr[i] != ' ') {
int j = i;
while (i<arr.length && arr[i] != ' ') {
i++;
}
i--;
int index = i;
while (j < i) {
char temp = arr[j];
arr[j] = arr[i];
arr[i] = temp;
j++;
i--;
}
i = index;
}
}
return new String(arr);
}
05 小結(jié)
算法專題目前已日更超過三個月,算法題文章126+篇想鹰,公眾號對話框回復(fù)【數(shù)據(jù)結(jié)構(gòu)與算法】紊婉、【算法】、【數(shù)據(jù)結(jié)構(gòu)】中的任一關(guān)鍵詞辑舷,獲取系列文章合集喻犁。
以上就是全部內(nèi)容,如果大家有什么好的解法思路何缓、建議或者其他問題肢础,可以下方留言交流,點贊碌廓、留言传轰、轉(zhuǎn)發(fā)就是對我最大的回報和支持!