列表

详情


2351. 第一个出现两次的字母

给你一个由小写英文字母组成的字符串 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' 。

 

提示:

原站题解

去查看

上次编辑到这里,代码来自缓存 点击恢复默认模板
class Solution { public: char repeatedCharacter(string 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

上一题