2351. 第一个出现两次的字母
LeetCode: 2351. 第一个出现两次的字母
简单 \color{#00AF9B}{简单} 简单
给你一个由小写英文字母组成的字符串
s
,请你找出并返回第一个出现 两次 的字母。注意:
- 如果
a
的 第二次 出现比b
的 第二次 出现在字符串中的位置更靠前,则认为字母a
在字母b
之前出现两次。s
包含至少一个出现两次的字母。
示例 1:
输入:s = "abccbaacz"
输出:"c"
解释:
字母 'a' 在下标 0 、5 和 6 处出现。
字母 'b' 在下标 1 和 4 处出现。
字母 'c' 在下标 2 、3 和 7 处出现。
字母 'z' 在下标 8 处出现。
字母 'c' 是第一个出现两次的字母,因为在所有字母中,'c' 第二次出现的下标是最小的。
示例 2:
输入:s = "abcdd"
输出:"d"
解释:
只有字母 'd' 出现两次,所以返回 'd' 。
提示:
2 <= s.length <= 100
s
由小写英文字母组成s
包含至少一个重复字母
方法1:哈希表
我们可以将每一个字符映射到哈希表中。初始状态下,每一个字符键所对应的值都为 false
。
开始遍历字符串中的字符。每次遍历到后,将该字符对应的哈希表值设为 true
。
如何来确定某个字符已经是第二次出现了呢?实际上,我们需要在设置 true
之前,对哈希表值进行判断。如果在设置之前已为 true
,则代表在之前的循环中,这个字符已经出现了,已经把对应位置设置为 true
了,所以这次遍历我们才能得到一个真值。这种情况下,该字符就是第二次出现了。
我们也可以将哈希表的记录类型设置为整型,以记录字符的出现次数。当某字符的计数为 2
时,就代表该字符第二次出现。
(没有那么重要)
需要注意的是:由于题目所给条件中指明,每个字符串都至少包含一个重复字符。也就是说,我们在循环的过程中一定能够找到目标字符,这时我们就可以直接返回结果了。但是为了确保函数的完整,我们在循环外仍然需要“虚空”返回一个值,确保函数的“每一条路”都能够返回char
类型的值。
在下面的例子中,便是最后的那句 “return 0;”
下面是布尔类型的哈希表实现。
class Solution {
public:
char repeatedCharacter(string s) {
bool hashmap[26] {
false};
for (const char& c : s)</