【LeetCode】3月28日打卡-Day13
題1 單詞的壓縮編碼
描述
給定一個單詞列表,我們將這個列表編碼成一個索引字符串 S 與一個索引列表 A。
例如,如果這個列表是 [“time”, “me”, “bell”],我們就可以將其表示為 S = “time#bell#” 和 indexes = [0, 2, 5]。
對于每一個索引,我們可以通過從字符串 S 中索引的位置開始讀取字符串,直到 “#” 結束,來恢復我們之前的單詞列表。
那么成功對給定單詞列表進行編碼的最小字符串長度是多少呢?
示例:輸入: words = [“time”, “me”, “bell”]
輸出: 10
說明: S = “time#bell#” , indexes = [0, 2, 5] 。
提示:
1 <= words.length <= 2000
1 <= words[i].length <= 7
每個單詞都是小寫字母 。
題解
思路:如果單詞集合中存在一個單詞是另一個單詞的后綴則這個單詞被壓縮,不計入最后的長度計算,相當于我們需要做的是:1.創建集合給原單詞集合去重,2.刪除原單詞集合中的后綴單詞,3.統計單詞長度和,每個單詞后面還有#,需要加一。
定義集合
Set<String> myset = new HashSet(Arrays.asList(words))
題2 最后一個單詞的長度
描述
給定一個僅包含大小寫字母和空格 ’ ’ 的字符串 s,返回其最后一個單詞的長度。如果字符串從左向右滾動顯示,那么最后一個單詞就是最后出現的單詞。
如果不存在最后一個單詞,請返回 0 。
說明:一個單詞是指僅由字母組成、不包含任何空格字符的 最大子字符串。
示例:
輸入: “Hello World”
輸出: 5
題解1
思路:思路簡單,通過修用例bug實現,首先把字符串最后一個單詞后的所有空格去掉,然后根據空格來截取最后一個單詞的長度。
速度很慢內存占用高
執行用時 :2 ms, 在所有 Java 提交中擊敗了17.69%的用戶
內存消耗 :37.9 MB, 在所有 Java 提交中擊敗了5.06%的用戶
題解2
思路一致:速度提升
執行用時 :0 ms, 在所有 Java 提交中擊敗了100.00%的用戶
內存消耗 :37.9 MB, 在所有 Java 提交中擊敗了5.06%的用戶
題3 二進制求和
描述
給定兩個二進制字符串,返回他們的和(用二進制表示)。
輸入為非空字符串且只包含數字 1 和 0。
示例 1:
輸入: a = “11”, b = “1”
輸出: “100”
示例 2:
輸入: a = “1010”, b = “1011”
輸出: “10101”
題解 逐位求和
思路:大值用來控制外層循環,小值用來控制內層循環,始終讓大值位于第一個參數,如果不符合,用return 交換一次參數位置。
carry用來保存進位值,如果carry=2 則要進位 當前位置為0 否則為1,進位之后carry/2=1用于下一步進位值計算。
時耗和內存都不佳,勉強算做出來
總結
以上是生活随笔為你收集整理的【LeetCode】3月28日打卡-Day13的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Tensorflow2.0 tf.fu
- 下一篇: Reshape cannot infer