劍指offer—58.翻轉單詞順序列—分析及程式碼(Java)
一、題目
牛客最近來了一個新員工Fish,每天早晨總是會拿著一本英文雜誌,寫些句子在本子上。同事Cat對Fish寫的內容頗感興趣,有一天他向Fish借來翻看,但卻讀不懂它的意思。例如,“student. a am I”。後來才意識到,這傢伙原來把句子單詞的順序翻轉了,正確的句子應該是“I am a student.”。Cat對一一的翻轉這些單詞順序可不在行,你能幫助他麼?
二、分析及程式碼
1. 兩次翻轉
(1)思路
先翻轉各個單詞,再對整個句子進行二次翻轉,即實現目標。
(2)程式碼
public class Solution {
public String ReverseSentence(String str) {
if (str.trim().equals(""))
return str;
char[] chstr = str.toCharArray();
int l = 0, length = str.length();
for (int i = 0; i < length; i++) {
if (chstr[i] == ' ') {
Reverse(chstr, l, i - 1);
l = i + 1;
}
if (i == length - 1 && l < i)
Reverse(chstr, l, length - 1);
}
Reverse(chstr, 0, length - 1);
return String.valueOf(chstr);
}
public void Reverse(char[] chstr, int l, int r) {
int m = (l + r) >> 1;
for (int i = l; i <= m; i++) {
char temp = chstr[i];
chstr[i] = chstr[l + r - i];
chstr[l + r - i] = temp;
}
return;
}
}
(3)結果
執行時間:21ms,佔用記憶體:9648k。
2. 直接拼接
(1)思路
如果允許使用輔助空間,直接對原字串進行拼接即可。
(2)程式碼
public class Solution {
public String ReverseSentence(String str) {
if (str.trim().equals(""))
return str;
String[] substr = str.split(" ");
String ans = substr[substr.length - 1];
for (int i = substr.length - 2; i >= 0; i--)
ans = ans.concat(" " + substr[i]);
return ans;
}
}
(3)結果
執行時間:20ms,佔用記憶體:9360k。
三、其他
暫無。
相關文章
- 力扣 - 劍指 Offer 58 - I. 翻轉單詞順序力扣
- 劍指offer—58_2.左旋轉字串—分析及程式碼(Java)字串Java
- 劍指offer—49.醜數—分析及程式碼(Java)Java
- JZ-044-翻轉單詞順序列
- 劍指offer之順序列印陣列陣列
- 劍指Offer 撲克牌順子
- 每日一練(31):翻轉單詞順序
- 劍指offer(Java版)--將字串轉換為整數Java字串
- 劍指OFFER
- 劍指offer-19:順時針列印矩陣矩陣
- 劍指offer解析-上(Java實現)Java
- 劍指offer解析-下(Java實現)Java
- 《劍指offer》JAVA題解,LeetCode評測JavaLeetCode
- 劍指 Offer 24. 反轉連結串列
- 劍指 Offer 24.反轉連結串列
- 劍指offer面試題29:順時針列印矩陣面試題矩陣
- 力扣 - 劍指 Offer 29. 順時針列印矩陣力扣矩陣
- 劍指 Offer 29-順時針列印矩陣c++矩陣C++
- 劍指offer導航
- Leetcode劍指offer(八)LeetCode
- 劍指 offer21
- 劍指offer16
- 劍指 offer20
- 劍指offer:旋轉陣列的最小數字陣列
- 劍指offer 旋轉陣列的最小數字陣列
- 劍指Offer:JZ30-連續子陣列最大和(解題思路+Java程式碼)陣列Java
- 【劍指offer】10.程式的完整性
- 劍指offer-JavaScript版JavaScript
- 【劍指Offer】矩形覆蓋
- 劍指Offer題解合集
- 劍指offer——跳臺階
- 六、劍指 Offer(25~29)
- 劍指offer-轉陣列的最小數字-php陣列PHP
- 劍指offer——把字串轉換成整數C++字串C++
- [劍指offer] 二叉搜尋樹的後序遍歷序列
- 劍指 Offer 57 - II. 和為s的連續正數序列
- [劍指offer] JAVA版題解(完整版)更新中。。。Java
- 劍指offer面試題(41-50)——java實現面試題Java