摘要:題目內(nèi)容這題也是鎖住的,通過率只有左右。另外,字典里面只有兩個的時候,也是返回。最后再說兩句距離上一篇文章過了一段時間了,這段時間搬家再適應新環(huán)境,解決心理問題。
題目內(nèi)容
An abbreviation of a word follows the form. Below are some examples of word abbreviations: a) it --> it (no abbreviation) 1 b) d|o|g --> d1g 1 1 1 1---5----0----5--8 c) i|nternationalizatio|n --> i18n 1 1---5----0 d) l|ocalizatio|n --> l10n Assume you have a dictionary and given a word, find whether its abbreviation is unique in the dictionary. A word abbreviation is unique if no other word from the dictionary has the same abbreviation. Example: Given dictionary = [ "deer", "door", "cake", "card" ] isUnique("dear") -> false isUnique("cart") -> true isUnique("cane") -> false isUnique("make") -> true
這題也是鎖住的,通過率只有15%左右。這讓我不得其解,為啥一道easy級別的題目會有如此低的Pass?是人性的扭曲還是道德的淪喪,美國沒有《走近科學》,只能自己動手寫。
解決思路這題比較考察洋文水平,掃一眼要求很容易看出,應該把已有的dictionary的縮略詞都縮出來,存到一個地方,剛開始用了個Set。再調(diào)用isUnique的時候,用目標字符串壓縮后和Set里面的元素做比較。有相同的就返回false,沒有就是true。
但是,
后來出了問題,因為目標詞可能和字典里面的詞一致,比如字典里只有有"hello",調(diào)用isUnique檢查hello的時候,應該返回true,因為沒有其他詞和h3o一樣了。另外,字典里面只有兩個hello的時候,也是返回true。所以這題的關鍵點在于『no other word』
public class ValidWordAbbr { Map復雜度分析> map = new HashMap<>(); public ValidWordAbbr(String[] dictionary) { //每個詞都輪一遍 for (String str : dictionary) { String abrv = abbrev(str); if (!map.containsKey(abrv)){ ArrayList list = new ArrayList<>(); list.add(str); map.put(abrv,list); } else { ArrayList list = map.get(abrv); //這里的判斷是過濾相同的詞 if (!list.contains(str)) list.add(str); map.put(abrv, list); } } } public boolean isUnique(String word) { String abrv = abbrev(word); if (map.containsKey(abrv)){ //先看相同壓縮串是不是代表多個詞,一旦多了那肯定不行 if (map.get(abrv).size() > 1) return false; //如果只有1個,那就對比一下這兩個詞是不是一樣的,一樣就行 else if (map.get(abrv).get(0).equals(word)) return true; return false; } //其他情況肯定是都行。 return true; } //把字符串變成壓縮串 public String abbrev(String word){ if(word == null || word.length() < 3){ return word; } //把頭,數(shù)字,尾巴連起來。 StringBuilder sb = new StringBuilder(); int len = word.length()-2; String slen = String.valueOf(len); sb.append(word.charAt(0)); sb.append(slen); sb.append(word.charAt(word.length()-1)); return sb.toString(); } //做測試用 public static void main(String[] args) { String[] test = {"hello", "a", "a"}; ValidWordAbbr vwa = new ValidWordAbbr(test); System.out.print(vwa.isUnique("a")); } }
截至目前,我還不太清楚這種設計題會不會特別在意復雜度,可能更注重corner case。這題遍歷一遍字典就可以了,所以復雜度是O(n)。需要注意的是no other word這個說法,讓我多付出了兩次submit的代價,不過還好比15%高一些。
最后再說兩句距離上一篇文章過了一段時間了,這段時間搬家再適應新環(huán)境,解決心理問題。從這一篇開始將會繼續(xù)保持更新進度。
文章版權歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/65064.html
摘要:鏈接注意第一個數(shù)字是的情況,這種也是不合法的。還有一個注意的就是要想和有相同的縮寫,長度必須和它相同,所以只保留長度相同的。注意剪枝,當前長度已經(jīng)超過就不需要繼續(xù)了。二進制的做法是這樣的,先對字典里面的單詞進行處理。 Valid Word Abbreviation 鏈接:https://leetcode.com/problems... 注意第一個數(shù)字是0的情況,[a, 01]這種也是不...
摘要:題目內(nèi)容比較不同的版本號,并根據(jù)大小返回,或。并提醒版本意思是第二代的第五次升級,反正不是數(shù)字上的的意思。代碼拆分兩個字符串這里用最大的長度作為循環(huán)范圍因為循環(huán)范圍是最大長度,所以缺的位置補復雜度分析,和分別是兩個字符串的長度。 題目內(nèi)容 比較不同的版本號,并根據(jù)大小返回-1,1或0。并提醒2.5版本意思是第二代的第五次升級,反正不是數(shù)字上的2.5的意思。 解決思路 直觀的想法是,找到...
摘要:所以這題先建立一個對應的,然后掃一遍字符串就可以了。復雜度分析第二題題目內(nèi)容解決思路一看關鍵詞,通常都是,深搜一遍,挖地三尺,雁過拔毛。復雜度分析第三題題目內(nèi)容解決思路復雜度分析 該系列共三道題,Company Tag只有一個Google,那就必須要做了。 第一題題目內(nèi)容 A strobogrammatic number is a number that looks the same ...
摘要:解決思路有一首歌名是下一個天亮,不過和這道題沒什么關系。根據(jù)這兩個例子猜測,需要兩個輔助的方法,一個是交換,另一個是逆序。所以第一步的思路就是從后往前找,找一對兒符合要求的相鄰數(shù)字。這道題的關鍵在于,找到規(guī)律,數(shù)學上的規(guī)律。 題目內(nèi)容 給出一個數(shù)組,重新排列,返回『下一個排列,題目的描述中還給出了幾個例子。 解決思路 有一首歌名是下一個天亮,不過和這道題沒什么關系。還有一類題是已有一堆...
摘要:題目內(nèi)容因為這道題被鎖住了,在寫這篇文章時還有天就要過期了,把原題也貼上來。題目要求,樹的結構是每個當右邊子節(jié)點的,它肯定有個,就是它的根節(jié)點肯定有個左邊子節(jié)點,也就是說它是二胎。遞歸設置終止條件,在空節(jié)點或最左邊的葉子處終止。 題目內(nèi)容 Given a binary tree where all the right nodes are either leaf nodes with a...
閱讀 2970·2021-11-22 15:25
閱讀 2251·2021-11-18 10:07
閱讀 1057·2019-08-29 15:29
閱讀 483·2019-08-29 13:25
閱讀 1515·2019-08-29 12:58
閱讀 3211·2019-08-29 12:55
閱讀 2923·2019-08-29 12:28
閱讀 514·2019-08-29 12:16