2351. 第一个出现两次的字母
给你一个由小写英文字母组成的字符串 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
包含至少一个重复字母原站题解
rust 解法, 执行用时: 0 ms, 内存消耗: 1.9 MB, 提交时间: 2023-09-12 16:24:28
/*解法一: hash数组 impl Solution { pub fn repeated_character(s: String) -> char { let mut cnt = vec![0; 26]; for ch in s.as_bytes() { if cnt[(ch - b'a') as usize] == 1 { return char::from(*ch); } cnt[(ch - b'a') as usize] += 1; } ' ' } } */ // 解法二: 位运算 impl Solution { pub fn repeated_character(s: String) -> char { let mut offset = 0; for ch in s.as_bytes() { if offset >> (ch - b'a') & 1 == 1 { return char::from(*ch); } offset |= 1 << (ch - b'a'); } ' ' } }
python3 解法, 执行用时: 36 ms, 内存消耗: 16 MB, 提交时间: 2023-09-12 16:22:51
# 状态压缩 class Solution: def repeatedCharacter(self, s: str) -> str: seen = 0 for ch in s: x = ord(ch) - ord("a") if seen & (1 << x): return ch seen |= (1 << x)
javascript 解法, 执行用时: 84 ms, 内存消耗: 41 MB, 提交时间: 2023-09-12 16:22:21
/** * @param {string} s * @return {character} */ var repeatedCharacter = function(s) { const seen = new Set(); for (let i = 0; i < s.length; i++) { const ch = s[i]; if (seen.has(ch)) { return ch; } seen.add(ch); } // impossible return ' '; };
python3 解法, 执行用时: 44 ms, 内存消耗: 16.1 MB, 提交时间: 2023-09-12 16:21:55
class Solution: def repeatedCharacter(self, s: str) -> str: seen = set() for c in s: if c in seen: return c seen.add(c)
golang 解法, 执行用时: 4 ms, 内存消耗: 1.8 MB, 提交时间: 2023-09-12 16:21:14
func repeatedCharacter(s string) byte { seen := map[rune]bool{} for _, c := range s { if seen[c] { return byte(c) } seen[c] = true } return 0 // impossible }
java 解法, 执行用时: 0 ms, 内存消耗: 39.4 MB, 提交时间: 2023-09-12 16:20:44
class Solution { public char repeatedCharacter(String s) { Set<Character> seen = new HashSet<Character>(); for (int i = 0; i < s.length(); i++) { char ch = s.charAt(i); if (!seen.add(ch)) { return ch; } } // impossible return ' '; } }
php 解法, 执行用时: 8 ms, 内存消耗: 18.7 MB, 提交时间: 2023-09-12 16:20:06
class Solution { /** * @param String $s * @return String */ function repeatedCharacter($s) { $q = []; for ($i = 0; $i < strlen($s); $i++ ) { if ( isset($q[$s[$i]]) ) return $s[$i]; $q[$s[$i]] = 1; } } }
golang 解法, 执行用时: 0 ms, 内存消耗: 1.8 MB, 提交时间: 2022-08-05 14:52:17
func repeatedCharacter(s string) byte { mask := 0 for _, c := range s { if mask>>(c&31)&1 > 0 { return byte(c) } mask |= 1 << (c & 31) } return 0 }
python3 解法, 执行用时: 36 ms, 内存消耗: 14.9 MB, 提交时间: 2022-08-05 14:50:35
class Solution: def repeatedCharacter(self, s: str) -> str: q = defaultdict(int) for c in s: if q[c] == 1: return c else: q[c] = 1