持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第 1 天,点击查看活动详情
判定字符是否唯一
实现一个算法,确定一个字符串 s 的所有字符是否全都不同。
示例 1:
输入: s = "leetcode"
输出: false
示例 2:
输入: s = "abc"
输出: true
限制:
0 <= len(s) <= 100- 如果你不使用额外的数据结构,会很加分。
思路分析
方法一
- 方法一依旧是很粗暴的方法;
- 定义一个
obj以字符串中的字符为key,true为value的对象; - 遍历字符串,判断
obj[astr[i]],若为true,则表示有重复的字母, 直接return false即可。否则,将obj[astr[i]]设置为true; - 到最后
return true。
方法二
- 使用
ES6的set对象给字符串进行去重; - 若有重复的字母,则去重后的长度会比原先字符串的长度减小;
- 返回去重后的长度是否与原字符串的长度是否相同。
方法三
- 若字符串中的某个字符是唯一的,那么它在字符串中的位置也一定是唯一的;
- 比较字符串中的字符第一次出现的位置和最后一次出现的位置是否相同即可;
indexOf可以找到字符第一次出现的位置,lastIndexOf可以找到字符最后一次出现的位置。
AC 代码
方法一
/**
* @param {string} astr
* @return {boolean}
*/
var isUnique = function(astr) {
const obj = {}
for(let i = 0; i < astr.length; i++) {
if(obj[astr[i]]) {
return false
}
obj[astr[i]] = true
}
return true
};
结果:
- 执行结果: 通过
- 执行用时:64 ms, 在所有 JavaScript 提交中击败了29.99%的用户
- 内存消耗:40.8 MB, 在所有 JavaScript 提交中击败了55.59%的用户
- 通过测试用例:17 / 17
方法二
/**
* @param {string} astr
* @return {boolean}
*/
var isUnique = function(astr) {
return new Set(astr).size === astr.length
};
结果:
- 执行结果: 通过
- 执行用时:60 ms, 在所有 JavaScript 提交中击败了56.79%的用户
- 内存消耗:40.8 MB, 在所有 JavaScript 提交中击败了66.74%的用户
- 通过测试用例:17 / 17
方法三
/**
* @param {string} astr
* @return {boolean}
*/
var isUnique = function(astr) {
for(let i = 0; i < astr.length; i++) {
if(astr.indexOf(astr[i]) !== astr.lastIndexOf(astr[i])) {
return false
}
}
return true
};
结果:
- 执行结果: 通过
- 执行用时:60 ms, 在所有 JavaScript 提交中击败了56.79%的用户
- 内存消耗:40.8 MB, 在所有 JavaScript 提交中击败了62.40%的用户
- 通过测试用例:17 / 17