Algorithm
Given a string s consists of upper/lower-case alphabets and empty space characters ' '
, return the length of last word in the string.
If the last word does not exist, return 0.
Note: A word is defined as a character sequence consists of non-space characters only.
Example:
Input: "Hello World"
Output: 5
思路:
需要考慮 4 種情形,"hello world", " hello world", "hello world ", " hello world "直撤。 其實綜合起來就3種情形非竿。第 4 種是 2、3 情形的綜合谋竖。
另外红柱,不管條件判斷是怎樣的,當一次判斷執(zhí)行完之后蓖乘,都要將 prev 設(shè)置為當前值 cur锤悄。
從頭到尾遍歷,以 \0 為結(jié)束符嘉抒。
將 prev 和 cur 都指向第一個字符零聚。
當當前值不是空格時,先看看 prev 是不是空格些侍,如果是隶症,則計數(shù)值重置為 1,如果不是岗宣,就計數(shù)值加 1蚂会。
當當前值是空格時,先不要將計數(shù)值清零狈定,繼續(xù)遍歷颂龙。直到在下面的遍歷過程中出現(xiàn)不是空格的字符時,再將計數(shù)值設(shè)為1纽什,同時將 prev 設(shè)置為當前值 cur措嵌。因為有可能后面的遍歷過程中都不再出現(xiàn)字母。
int lengthOfLastWord(char * s) {
char prev = *s;
char cur = *s;
int len = 0;
while (cur != '\0') { // 或者 cur != 0
if (cur != ' ') {
// 如果當前值不是空格芦缰,但是 prev 是空格企巢,就將 len 重新賦值為 1
len = (prev == ' ') ? 1 : len + 1;
}
prev = cur;
s += 1;
cur = *s;
}
return len;
}
/* 這是一開始的寫法,后來發(fā)現(xiàn) if-else 可以合并起來让蕾。*/
// // 如果當前值是空格
// if (cur == ' ') {
// prev = cur;
// } else {
// // 如果當前值不是空格浪规,但是 prev 是空格或听,就將 len 重新賦值為 1
// len = (prev == ' ') ? 1 : len + 1;
// prev = cur;
// }
Review
Writing a Network Layer in Swift: Protocol-Oriented Approach
一篇講解在 Swift 下如何實現(xiàn)面向協(xié)議的網(wǎng)絡層框架的文章。對于網(wǎng)絡層的每一層講解得都非常到位笋婿,寫得非常通俗易懂誉裆。建議跟著作者的步驟自己手敲一遍。
Tip
iOS 11 下設(shè)置網(wǎng)絡的連通性
URLSession Waiting For Connectivity
在 iOS 11 之前缸濒,當用 NSURLSession
start 一個任務時足丢,如果網(wǎng)絡不可用,會立即報錯庇配。在 iOS 11中改進了這一情況斩跌。你可以設(shè)置 NSURLSessionConfiguration
的 waitsForConnectivity
為 YES 告訴 NSURLSession
當網(wǎng)絡可用時再次嘗試連接。
末尾附上 demo 地址捞慌。
ps:當斷開網(wǎng)絡再重新連接后耀鸦,需要過一會兒才會開始下載圖片,請耐心等待啸澡。
Share
最近在看 iOS 并發(fā)編程指南的文檔袖订,對線程、隊列锻霎、GCD 有了更加全面的認識著角,強烈推薦。文末附上中文版翻譯文檔旋恼。