題目如下:
牛客最近來了乙個新員工fish,每天早晨總是會拿著一本英文雜誌,寫些句子在本子上。同事cat對fish寫的內容頗感興趣,有一天他向fish借來翻看,但卻讀不懂它的意思。例如,「student. a am i」。後來才意識到,這傢伙原來把句子單詞的順序翻轉了,正確的句子應該是「i am a student.」。cat對一一的翻轉這些單詞順序可不在行,你能幫助他麼?
這道題的解法很多,當時腦海裡有好幾種思維方式。這裡僅僅說一種我當時很快覺得靠譜的.
既然是反轉單詞順序,那麼肯定有兩點需要關注:
1.應該從最後乙個單詞反向向第乙個單詞遍歷。
2.既然是單詞反向排列順序,我們自然要想到單詞的分隔符』 『(即空格)
3 這裡容易犯乙個錯誤,認為單詞和單詞之間只有乙個空格。但實際上,單詞與單詞之間的空格未必只有乙個
實際上,我在寫程式的時候,對於上述第三點,犯了很嚴重的錯誤,認為單詞和單詞之間只有乙個空格。實際上,我們應該原封不動的統計源字串中有多少空格。我使用了雙索引的技術來實現字串的翻轉。乙個索引位於單詞的開頭前乙個位置,乙個索引位於單詞的末尾,程式如下:
1class
solution
17 res = res+str.substr(index2+1,index1-index2);//
完成將字串加入結果中
18if(index2 == -1)//
如果遍歷到了最靠頭,最後乙個單詞後面後面是沒有空格的,我們不需要進行空格遍歷
19break;20
//需要注意的是空格可能不止乙個,因此科學的做法並不統計空格的數量
21 index1 = index2;//
反向第乙個空格
22while(str[index2] == '')
2326 res =res +str.substr(index2+1,index1-index2);//
將原字串的若干空格加入結果中
27 index1 =index2;28}
29return
res;30}
31 };
牛客網 劍指Offer(66題)
1 在乙個二維陣列中 每個一維陣列的長度相同 每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成乙個函式,輸入這樣的乙個二維陣列和乙個整數,判斷陣列中是否含有該整數。方法一 直接遍歷二維陣列 public class solution find 8,a public st...
牛客網 劍指Offer 索引
二維陣列中的查詢 替換空格 從尾到頭列印鍊錶 重建二叉樹 用兩個棧實現佇列 旋轉陣列的最小數字 斐波那契數列 跳台階 跳台階 矩形覆蓋 二進位制中1的個數 數值的整數次方 調整陣列順序使奇數字於偶數前面 鍊錶中倒數第k個結點 反轉鍊錶 合併兩個排序的鍊錶 樹的子結構 二叉樹的映象 順時針列印矩陣 包...
牛客網 劍指Offer 索引
二維陣列中的查詢 替換空格 從尾到頭列印鍊錶 重建二叉樹 用兩個棧實現佇列 旋轉陣列的最小數字 斐波那契數列 跳台階 跳台階 矩形覆蓋 二進位制中1的個數 數值的整數次方 調整陣列順序使奇數字於偶數前面 鍊錶中倒數第k個結點 反轉鍊錶 合併兩個排序的鍊錶 樹的子結構 二叉樹的映象 順時針列印矩陣 包...