sysprog2020
目的: 檢驗學員對遞迴呼叫和記憶體管理的認知
1
LeetCode 1239. Maximum Length of a Concatenated String with Unique Characters 題意:給定一個由 C 風格字串構成的陣列 arr
,字串 s
是將 arr
某個字串連接所得的字串,若 s
中的每個字元都只出現一次,於是這會是個可能解。請提供所有可能解 s
中最大的長度。
範例 1
arr =
["un", "iq", "ue"]
4
"", "un", "iq", "ue", "uniq", "ique"
,最大長度為 4
範例 2
arr =
["cha", "r", "act", "ers"]
6
6
範例 3
arr =
["abcdefghijklmnopqrstuvwxyz"]
\0
),僅有小寫英文字母本題用遞迴來思考:依序走訪每個單詞,對於目前的字串,若與之前連接的字串沒有相同的字串,那我們就可選擇將其串接或不串接。反之,若目前字串與之前串接的字串存在相同字元,那我們就無法串接。
針對 LeetCode 1239. Maximum Length of a Concatenated String with Unique Characters,以下 C 程式是對應的解法:
請補完程式碼,使得符合預期。
作答區
ACT1 = ?
(a)
if (k != len) continue
(b)
if (__builtin_popcount(k) != len) continue
(c)
if (k != len) break
(d)
if (__builtin_popcount(k) != len) break
ACT2 = ?
(a)
*maxm = MAX(c, *maxm)
(b)
*maxm = c
(c)
*maxm |= c
(d)
*maxm &= c
(e)
*maxm ^= c
(f)
*maxm = MAX(__builtin_popcount(c), *maxm)
ASSIGN = ?
(a)
c |= arr[i]
(b)
c &= arr[i]
(c)
c ^= arr[i]
(d)
c = arr[i]
延伸問題:
2
考慮以下透過 mmap 實作快速檔案複製的程式碼: mmap-filecopy.c
編譯方式:
假設原本已有檔名為 in
的檔案,且 out
不存在目前的路徑,可執行以下命令:
這樣即可達成快速的檔案複製。
請補完程式碼,使得符合預期。
作答區
PROP = ?
(a)
PROT_READ | PROT_WRITE
(b)
PROT_READ
延伸問題: