從周日開始做real time vision 做到了周二,然后周三一整天被老板壓迫工作到晚上10點半T^T
1點多終于有時間開始刷題了...[感覺面試要死了]
對于大部分的面試算法鬼雀,我都是嗤之以鼻的因為并沒有什么卵用抛丽。這個題算是少數(shù)覺得比較實用的算法吧
這道題我看到的第一想法是 ?假設不考慮代碼,人是怎么判斷的拜轨。
"ABCCED" 人類會先從字母A開始行動印颤,找整個array事甜。 找不到這個字母的話就直接宣布說這個word找不到馒疹。
找到的話佳簸,繼續(xù)下一個字母去找, 然后重復。唯一要注意的就是颖变,每個字母不能重復使用生均。人類在做這個的時候听想,會記住哪些字母自己已經(jīng)用過了然后不會去用。由于之前做過一道題類似疯特,使用之前的方法就是把到過的地方mark used哗魂。
但是稍微實現(xiàn)一點代碼后會發(fā)現(xiàn)肛走,需要至少3個For loop:
第一層: 我們需要一個一個letter的走漓雅,
第二層,我們需要iterate row,
第三層 iterate col.
如果被用過的地方朽色,我們可以把上面的char 變成一個奇怪的字符之類的邻吞。
但是發(fā)現(xiàn)每一個字母都要Iterate整個array發(fā)現(xiàn)都找不到才能判定是不是真的不存在。
after 20分鐘以后葫男。抱冷。。我突然發(fā)現(xiàn)理解錯題目了梢褐。旺遮。是問sequentially adjacent。盈咳。耿眉。OMG。鱼响。鸣剪。
...我簡直不敢相信這道題竟然花了我一個小時。丈积。筐骇。。
有幾個很傻比的問題錯誤?
一個是我做的時候竟然還是iterate string.
正確思路應該是 只要第一個char 對上了以后江滨, 馬上開始recursion铛纬,之后的活交給recursion function來做。
check() function里面的if( || || || ||) 是一個又tricky又不tricky的東西唬滑。形象一點的說法就是派上下左右4個小分隊去偵查告唆,只要有一個小分隊成功,就代表我們找到了subproblem的解间雀。我之前刷的題里幾乎沒有用過這么多or operation 來判斷的悔详,所以也算一個鍛煉了。
還一個很容易犯的錯誤就是沒有會忘了char recover back惹挟。 因為recursion的過程中我們嘗試了很多可能茄螃,如果失敗的話之前試過的整個partial string都是不行的。 但是由于已經(jīng)放了empty char 在那個position连锯, 以后的recursion會誤以為那個點被用過了归苍。所以和backtrack的思路一樣用狱,我們需要recover back。?