寫在前面:一個程序猿還是要有點(diǎn)追求桐早,正如“輪子哥”所說 “編譯原理逊笆,圖形學(xué)栈戳,操作系統(tǒng)”這才是最應(yīng)該追求的,這些的背后都是有一系列算法难裆、數(shù)據(jù)結(jié)構(gòu)等支撐的子檀。然而工作中的一大堆業(yè)務(wù)代碼,早讓自己把大學(xué)所學(xué)的算法遺忘了乃戈。
記得剛?cè)腴T iOS 有段時間褂痰,自己也本末倒置,去追求酷炫的交互症虑,復(fù)雜的動畫缩歪。其實(shí)現(xiàn)在看來不過就是 Core Animation 的翻來覆去的調(diào)用、組合谍憔,讓自己成為了一個熟練工而已匪蝙。真正有力量的東西反而越來越薄弱了,所以這就是我開始寫這個 Blog 的原因习贫。
其實(shí)這是筆試面試中很常見的題型逛球,讓你實(shí)現(xiàn)一個庫函數(shù),記得 C++ 是返回指針首次出現(xiàn)的位置苫昌,不過 C++ 經(jīng)常使用的是 memcpy颤绕。由于我們是 iOS 程序猿所以我這次就準(zhǔn)備都用 OC 來擼一遍。
注意點(diǎn):
1.Coding Style : 變量名字一定要有意義 ,如果面試的時候?qū)? (int)strStr:(NSString *)s1 s2:(NSString *)s2 就太 ugly 了奥务。if 換行加花括號涕烧,增強(qiáng)可讀性。還有我覺得代碼太緊湊的那種(沒有合理縮進(jìn)的一定是代碼量太少了)汗洒;
2.參數(shù)檢查:不能保證用戶的輸入都是合法的「缚睿空串和 nil 不是一個意思溢谤,空串時有長度信息 0;
3.訪問下標(biāo)前一定要驗(yàn)證下標(biāo)是否存在憨攒,吐槽一下 OC 訪問下標(biāo)看起來太長一串了世杀,有點(diǎn)惡心(characterAtIndex)。
- (int)strStr:(NSString *)source target:(NSString *)target {
if (!source || !target) {
return -1;
}
int i, j;
for (i = 0; i < source.length - target.length + 1; i++) { // 防止下標(biāo)越界
for (j = 0; j < target.length; j++) {
if ([source characterAtIndex:(i + j)] != [target characterAtIndex:j]) {
break;
}
}
if (j == target.length) {
return i;
}
}
return -1;
}