一、题目
实现一个算法,确定一个字符串 s 的所有字符是否全都不同,点击此处跳转。
示例 1:
输入: s = “leetcode”
输出: false
示例 2:
输入: s = “abc”
输出: true
限制:
- 0 <= len(s) <= 100
- s[i] 仅包含小写字母
- 如果你不使用额外的数据结构,会很加分。
二、C# 题解
使用数组记录出现次数,时间、空间复杂度均为 O ( n ) O(n) O(n):
public class Solution {
public bool IsUnique(string astr) {
int[] record = new int[26]; // 记录数组
for (int i = 0; i < astr.Length; i++) { // 遍历字符串
int index = (int) (astr[i] - 'a'); // 得到每个字符在数组中对应的下标
if (record[index] > 0) return false; // 出现,则返回 false
else record[index]++; // 未出现,则记录 + 1
}
return true; // 到此步,则返回 true
}
}
数组记录有些浪费内存空间了,因此使用位运算记录也可。因为题目要求是字符串内仅包含小写字母,因此只会出现26种不同的字符,使用 int 变量有 32 位长度,足以覆盖范围。
0000 0000 0000 0000 0000 0000 0000 0000 ↓ ′ c ′ 0000 0000 0000 0000 0000 0000 0000 0100 ↓ ′ g ′ 0000 0000 0000 0000 0000 0000 0100 0100 ↓ ′ a ′ 0000 0000 0000 0000 0000 0000 0100 0101 ↓ ′ c ′ 重复,返回 f a l s e 0000 \quad 0000 \quad 0000 \quad 0000 \quad 0000 \quad 0000 \quad 0000 \quad 0000\\ ↓ 'c'\\ 0000 \quad 0000 \quad 0000 \quad 0000 \quad 0000 \quad 0000 \quad 0000 \quad 0100\\ ↓ 'g'\\ 0000 \quad 0000 \quad 0000 \quad 0000 \quad 0000 \quad 0000 \quad 0100 \quad 0100\\ ↓ 'a'\\ 0000 \quad 0000 \quad 0000 \quad 0000 \quad 0000 \quad 0000 \quad 0100 \quad 0101\\ ↓ 'c'\\ 重复,返回 false 00000000000000000000000000000000↓′c′00000000000000000000000000000100↓′g′00000000000000000000000001000100↓′a′00000000000000000000000001000101↓′c′重复,返回false
位运算记录的本质与上述数组记录类似,差别仅是内存使用。数组使用一个 int(32 位 bit)记录,而位运算使用 1 个 bit 记录,本质无区别。当然,运行速度会快些。
public class Solution {
public bool IsUnique(string astr) {
int record = 0; // 记录 int
for (int i = 0; i < astr.Length; i++) { // 遍历字符串
int index = 1 << (int) (astr[i] - 'a'); // 得到每个字符在 int 中对应的 bit 位数
if ((record & index) != 0) return false; // 与运算结果不为 0,则表示出现过
else record |= index; // 未出现,则或运算记录下该字符
}
return true; // 到此步,则返回 true
}
}
- 时间复杂度: O ( n ) O(n) O(n)。
- 空间复杂度:取决于出现字符的种类数目,此题为 O ( 1 ) O(1) O(1)。
使用位运算的好处:文章来源:https://www.toymoban.com/news/detail-652167.html
- 满足题目要求;
- 运行效率快些;
- 锻炼编程能力。
坏处:文章来源地址https://www.toymoban.com/news/detail-652167.html
- 处理字符种类有限:int 只能处理 32 种,long 只能处理 64 种;
- 不易于读写与修改。
到了这里,关于LeetCode 面试题 01.01. 判定字符是否唯一的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!