Contents
Problem
Solution
利用位運算和 DFS 去放入不同的數字,每次放完就去檢查是否可用三個 S 組成,可以就不繼續做(不是 triple-free),剪枝。
檢查時因為舊的字串已經檢查過,所以只需要檢查跟新加入那個有關的,例如:
cba => 通過
dcba => 檢查 dcb => 通過
edcba => 檢查 edc => 通過
fedcba => 檢查 fed 和 fedcba (S 長度為 2) => 通過
...
作法則是檢查時移掉後面已檢查過的位元:
check(str >> (len - 3 * i), i) //i = 子字串長度
Code
1 |
|