O(nlogn) Algorithm - Find three evenly spaced ones within binary string

前端 未结 30 2959
刺人心
刺人心 2020-11-28 00:07

I had this question on an Algorithms test yesterday, and I can\'t figure out the answer. It is driving me absolutely crazy, because it was worth about 40 points. I figure

30条回答
  •  Happy的楠姐
    2020-11-28 00:33

    This seemed liked a fun problem so I decided to try my hand at it.

    I am making the assumption that 111000001 would find the first 3 ones and be successful. Essentially the number of zeroes following the 1 is the important thing, since 0111000 is the same as 111000 according to your definition. Once you find two cases of 1, the next 1 found completes the trilogy.

    Here it is in Python:

    def find_three(bstring):
        print bstring
        dict = {}
        lastone = -1
        zerocount = 0
        for i in range(len(bstring)):
            if bstring[i] == '1':
                print i, ': 1'
                if lastone != -1:
                    if(zerocount in dict):
                        dict[zerocount].append(lastone)
                        if len(dict[zerocount]) == 2:
                            dict[zerocount].append(i)
                            return True, dict
                    else:
                        dict[zerocount] = [lastone]
                lastone = i
                zerocount = 0
            else:
                zerocount = zerocount + 1
        #this is really just book keeping, as we have failed at this point
        if lastone != -1:
            if(zerocount in dict):
                dict[zerocount].append(lastone)
            else:
                dict[zerocount] = [lastone]
        return False, dict
    

    This is a first try, so I'm sure this could be written in a cleaner manner. Please list the cases where this method fails down below.

提交回复
热议问题