題目連結(jié):
題目意譯:
給定一個(gè)字串 word 並且你可以在任意處插入任意個(gè)字母 'a' 、 'b' 或是 'c'?;貍髯?word 變成合法字串最少所需要插入的字母數(shù)。
一個(gè)字串如果可以藉由若干個(gè)字串 "abc" 串接在一起而形成,則稱為是「合法的」。
限制:
1 ≦ word.length ≦ 50
word 只由 'a' 、 'b' 和 'c' 所組成。
範(fàn)例測(cè)資:
範(fàn)例 1:
輸入: word = "b"
輸出: 2
解釋: 在 'b' 之前插入字母 'a' 並在 'b' 之後插入字母 'c' 來得到一個(gè)合法字串 "abc"。
範(fàn)例 2:
輸入: word = "aaa"
輸出: 6
解釋:在每一個(gè) 'a' 之後插入字母 'b' 和 'c' 來得到一個(gè)合法字串 "abcabcabc"。
範(fàn)例 3:
輸入: word = "abc"
輸出: 0
解釋: word 已經(jīng)合法了。不需要額外的修改。
解題思維:
掃過 word 並紀(jì)錄「現(xiàn)在」要是什麼字母並判斷即可。
假設(shè)現(xiàn)在你看到的字母之「值」是 c(用 0 、 1 、 2 依序替換 'a' 、 'b' 、 'c',方便計(jì)算),而現(xiàn)在的字母值應(yīng)該要是 x。
如果 c == x,代表著什麼都不用做;
如果 c < x(例如說,現(xiàn)在要是 'b' 但在 word 中看到了 'a'),則需要特別加入字母值 x ~ 2 以及字母值 0 ~ c - 1 的字母(不需要 c 本身,因?yàn)橐呀?jīng)有了),即總數(shù)為 (3 - x) + c。並令 x = c;
如果 c > x,則代表著我們需要加入字母值 x ~ c - 1 的字母,因此總數(shù)為 c - x。並令 x = c。
而看完每一個(gè)字母之後,把 x 移到「下一個(gè)」字母。因此將 x 之值設(shè)為 (x + 1) % 3,其中「%」為模運(yùn)算。
掃完 word 之後如果 x != 0,則代表著還要額外補(bǔ) 'b' 或 'c' 在結(jié)尾,因此插入字母總數(shù)還要額外加上 3 - x;反之,如果 x == 0,則不需要補(bǔ)。這邊整體可以簡(jiǎn)化為統(tǒng)一加上 (3 - x) % 3。
最後以上過程所有插入的字母之總數(shù)即為所求。
(注:範(fàn)例程式碼中將 x 移往下一個(gè)字母的時(shí)間點(diǎn)跟上面陳述的不一樣,因此會(huì)有些許調(diào)整。)
此次分享到此為止,如有任何更加簡(jiǎn)潔的想法或是有說明不清楚之地方,也煩請(qǐng)各位大大撥冗討論。