算法_第一次只出现一次的字符

难度:简单

描述:

给出一个字符串,找出第一个只出现一次的字符。

样例:

对于 aabc, b为第一个只出现一次的字符.

对于 abaccdeff, b为第一个只出现一次的字符.

思路分析:

可以用对象保存字符出现的次数。

代码模板:

1
const firstUniqChar = function(str) {};

想一想再看答案

想一想再看答案

想一想再看答案

代码:

  1. 将值删除,用 indexOf 查找还有没有相同字符,并查找之前删过的字符
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
const firstUniqChar = function(str) {
str = [...str];
let num = str.length; // 保存遍历次数
let obj = {}; // 保存被删元素
for (let i = 0; i < num; i++) {
let item = str.splice(0, 1)[0]; // 删除第一个值
if (str.indexOf(item) === -1 && obj[item] === undefined) {
// 当前数组中没有 并且对象中也没有
return item; // 找到
} else {
obj[item] = item; // 出现的字符串,用对象保存起来。
}
}
};
console.log('输出:', firstUniqChar('abaccdeff'), firstUniqChar('aabc'));
  1. indexOf 的第二个参数,从当前值往后搜索,并查找之前已经查过的字符

    想起了indexOf的第二个参数,省了一步删除的操作。

1
2
3
4
5
6
7
8
9
10
11
12
13
const firstUniqChar = function(str) {
str = [...str];
let obj = {};
for (let [index, key] of str.entries()) {
if (str.indexOf(key, index + 1) === -1 && obj[key] === undefined) {
// 跳过这个元素,当后面没有 并且前面也没有
return key; // 找到
} else {
obj[key] = key; // 前面出现过 存起来
}
}
};
console.log('输出:', firstUniqChar('abaccdeff'), firstUniqChar('aabc'));
  1. 记录字符出现的次数,遍历字符串,第一个只出现一次的字符,就是要找的值。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
const firstUniqChar = function(str) {
var obj = {}; // 用对象
for (var i = 0; i < str.length; i++) {
var code = str.charCodeAt(i);
// 记录出现的次数
if (obj[code] == undefined) {
obj[code] = 1;
} else {
obj[code]++;
}
}
for (var i = 0; i < str.length; i++) {
// 遍历字符串出现的顺序(保证第一次出现重复),当出现为1时,即找到
if (obj[str.charCodeAt(i)] == 1) {
return str.charAt(i);
}
}
return null;
};

鼓励我一下:

觉得还不错的话,给我的项目点个star

听说,打赏我的人最后都找到了真爱。