劍指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_2.左旋轉字串—分析及程式碼(Java)字串Java
- 劍指offer—49.醜數—分析及程式碼(Java)Java
- 劍指offer之順序列印陣列陣列
- 《劍指offer》:[61]按之字形順序列印二叉樹二叉樹
- 【劍指offer】調整陣列順序陣列
- 【劍指offer】順時針列印矩陣矩陣
- 【劍指offer】左旋轉字串字串
- 【劍指offer】字串轉整數字串
- 劍指offer-19:順時針列印矩陣矩陣
- 《劍指offer》:[62]序列化二叉樹二叉樹
- 劍指offer解析-下(Java實現)Java
- 劍指offer解析-上(Java實現)Java
- 劍指offer(Java版)--將字串轉換為整數Java字串
- 劍指offer面試題29:順時針列印矩陣面試題矩陣
- 《劍指offer》:[42-1]左旋轉字串字串
- 劍指 Offer 29-順時針列印矩陣c++矩陣C++
- 力扣 - 劍指 Offer 29. 順時針列印矩陣力扣矩陣
- 劍指offer面試16 反轉連結串列面試
- 《劍指offer》:[49]把字串轉化成整數字串
- 劍指offer-JavaScript版JavaScript
- 【劍指offer】字串的排列字串
- 劍指Offer題解合集
- (十四)劍指offer之棧的壓入彈出序列及包含min函式的棧函式
- 【劍指offer】10.程式的完整性
- 《劍指offer》JAVA題解,LeetCode評測JavaLeetCode
- 劍指offer面試題(41-50)——java實現面試題Java
- 劍指offer:旋轉陣列的最小數字陣列
- 劍指offer 旋轉陣列的最小數字陣列
- 【劍指offer】旋轉陣列的最小值陣列
- 劍指Offer:JZ30-連續子陣列最大和(解題思路+Java程式碼)陣列Java
- 劍指 offer(1) -- 陣列篇陣列
- Leetcode劍指offer(八)LeetCode
- 【劍指offer】【2】字串的空格字串
- 【劍指offer】字串的組合字串
- 劍指offer刷題記錄
- [劍指offer] JAVA版題解(完整版)更新中。。。Java
- 劍指offer-9-斐波那契數列-javaJava
- 劍指OFFER-從頭到尾列印連結串列(Java)Java