阿里在线面试(最大字符环问题)

class Solution(object):
    def number_get(self, numbers):
        '''
        :param numbers:list[str]
        :return:
        '''
        length_number = 0
        for i in range(len(numbers)):
            if numbers[i] < numbers[i][::-1]:
                numbers[i] = numbers[i][::-1]
            length_number = max(length_number, len(numbers[i]))
        numbers = sorted(numbers,cmp=self.comparator)
        number_index = 0
        index = 0
        left = numbers[0]
        right = ""
        result = left + "".join(numbers[:index] + numbers[index + 1:]) + right
        while number_index < length_number:
            for i in range(len(numbers)):
                if numbers[i][number_index:] >= left[:len(numbers[i][number_index:])]:
                    #     left = numbers[i][number_index:]
                    #     right = numbers[i][:number_index]
                    #     index = i
                    #     result = left+"".join(numbers[:index]+numbers[index+1:])+right
                    # elif numbers[i][number_index:]==left[:len(numbers[i][number_index:])]:
                    test_left = numbers[i][number_index:]
                    test_right = numbers[i][:number_index]
                    now = test_left + "".join(numbers[:i] + numbers[i + 1:]) + test_right
                    if now > result:
                        left = test_left
                        right = test_right
                        index = i
                        result = now

                test_number = numbers[i][::-1]
                if test_number[number_index:] >= left[:len(numbers[i][number_index:])]:
                    test_left = test_number[number_index:]
                    test_right = test_number[:number_index]
                    now = test_left + "".join(numbers[:i] + numbers[i + 1:]) + test_right
                    if now > result:
                        left = test_left
                        right = test_right
                        index = i
                        result = now

                print index, numbers[index], result
            number_index += 1
        return result




    def comparator(self,a,b):
        if a+b<b+a:
            return 1
        return -1



test = Solution()
print test.number_get(["876","813","745"])
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值