字符串问题---判断字符数组中是否所有的字符只出现了一次

【题目】

  给定一个字符类型数组chas,判断chas中是否所有的字符都只出现过一次。

【基本思路】

  一.时间复杂度为O(N)的算法。
  
  使用哈希表,记录每个字符出现的频数,如果发现字符的频数不为1,直接返回False。

  二.时间复杂度为O(NlogN),空间复杂度为O(1)的算法。
  
  1.先将数组排序,再判断当前字符是否等于前一个字符即可。
  
  2.关键使用什么样的排序算法,满足复杂度要求的算法只有非递归版的堆排序。

下面是使用python3.5实现的代码

#判断字符数组中是否所有的字符只出现了一次
#时间复杂度O(N)的算法
def isUnique1(arr):
    if arr == None or len(arr) == 0:
        return True
    map = {}
    for i in range(len(arr)):
        if arr[i] in map:
            return False
        map[arr[i]] = None
    return True

#额外空间复杂度O(1)的算法
def isUnique2(arr):
    def heapSort(arr):
        n = len(arr)
        for i in range((n-2)//2, -1, -1):
            precDown(arr, i, n)
        for i in range(n-1, 0, -1):
            arr[0], arr[i] = arr[i], arr[0]
            precDown(arr, 0, i)
        return arr

    def precDown(arr, i, n):
        child = 2 * i + 1
        tmp = arr[i]
        while child < n:
            if child < n-1 and arr[child] < arr[child+1]:
                child += 1
            if tmp < arr[child]:
                arr[i] = arr[child]
                i = child
            else:
                break
            child = 2 * i + 1
        arr[i] = tmp



    if arr == None or len(arr) == 0:
        return False
    print(heapSort([9,8,7,6,5,4,3,12,45,67]))
    heapSort(arr)
    for i in range(1, len(arr)):
        if arr[i] == arr[i-1]:
            return False
    return True
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值