Let's look at another medium level problem and solve it with bitwise manipulation
Q318 Maximum Product of Word Lengths
Use bit operations to mark
a num: 1 binary: 00000001
b num: 2 binary: 00000010
c num: 4 binary: 00000100
Then we can use | OR operator mark a string contains a, b, c as binary 00000111
And we can compare if two strings have commom character by checking stringA & stringB != 0
e.g.
stringA "abc" 00000111
stringB "ade" 00011001
stringC "def" 00111000
stringA & stringB == 0 -> false
stringC & stringB == 0 -> true
We only need 16 bits, so UInt32 is enough for the solution
https://github.com/Sylvia-YiyinShen/Algorithm/blob/master/BitManipulation/Q318MaximumProduct.playground/Contents.swift
Other bit manipulation problems in my blog:
http://hadesmercury.blogspot.com/2019/03/bit-manipulation-problems-1.html
http://hadesmercury.blogspot.com/2019/03/bit-manipulation-problems-2.html
http://hadesmercury.blogspot.com/2019/03/bit-manipulation-problems-3.html
http://hadesmercury.blogspot.com/2019/03/bit-manipulation-problems-4.html
More bit manipulation problems at Leetcode:
https://leetcode.com/tag/bit-manipulation/
No comments:
Post a Comment