Skip to content

Commit

Permalink
Merge pull request #55 from quzard/patch-1
Browse files Browse the repository at this point in the history
Update q002.md
  • Loading branch information
lifei6671 authored Feb 17, 2022
2 parents ec7e08c + f09e55a commit 63a7d02
Showing 1 changed file with 37 additions and 1 deletion.
38 changes: 37 additions & 1 deletion question/q002.md
Original file line number Diff line number Diff line change
Expand Up @@ -55,10 +55,46 @@ func isUniqueString2(s string) bool {
}
```

通过位运算判断

```
func isUniqString3(s string) bool {
if len(s) == 0 || len(s) > 3000 {
return false
}
// 256 个字符 256 = 64 + 64 + 64 + 64
var mark1, mark2, mark3, mark4 uint64
var mark *uint64
for _, r := range s {
n := uint64(r)
if n < 64 {
mark = &mark1
} else if n < 128 {
mark = &mark2
n -= 64
} else if n < 192 {
mark = &mark3
n -= 128
} else {
mark = &mark4
n -= 192
}
if (*mark)&(1<<n) != 0 {
return false
}
*mark = (*mark) | uint64(1<<n)
}
return true
}
```


**源码解析**

以上两种方法都可以实现这个算法
以上三种方法都可以实现这个算法

第一个方法使用的是golang内置方法`strings.Count`,可以用来判断在一个字符串中包含的另外一个字符串的数量。

第二个方法使用的是golang内置方法`strings.Index``strings.LastIndex`,用来判断指定字符串在另外一个字符串的索引未知,分别是第一次发现位置和最后发现位置。

第三个方法使用的是位运算来判断是否重复,时间复杂度为o(n),相比前两个方法时间复杂度低

0 comments on commit 63a7d02

Please sign in to comment.