实现一个算法,确定一个字符串 s 的所有字符是否全都不同。
示例 1:
输入: s = "leetcode"
输出: false
示例 2:
输入: s = "abc"
输出: true
限制:
0 <= len(s) <= 100
如果你不使用额外的数据结构,会很加分。
自我解答
最简单的自然是使用map记录,如果字符在map存在,则说明重复了。
但是题目希望不使用额外的数据结构,于是我想到了排序,若在在排序中发现相等的,则直接放回False
这里我选择的快速排序,由于 python不允许字符串中的字符被重新赋值,我把字符串转成了数组
class Solution:
def isUnique(self, astr: str) -> bool:
self.datas = [s for s in astr]
return self.quick_sort(0, len(astr) - 1)
def quick_sort(self, start_index, end_index):
if start_index >= end_index:
return True
i, j, base = start_index, end_index, self.datas[start_index]
while i != j:
while i != j:
if self.datas[j] == base:
return False
if self.datas[j] < base:
self.datas[i] = self.datas[j]
i += 1
break
j -= 1
while i != j:
if self.datas[i] == base:
return False
if self.datas[i] > base:
self.datas[j] = self.datas[i]
j -= 1
break
i += 1
self.datas[i] = base
return self.quick_sort(i + 1, end_index) and self.quick_sort(start_index, i - 1)