解题思路

  1. 使用哈希表记录字符出现情况:

    • 遍历字符串
    • 记录每个字符的出现次数
    • 再次遍历找到第一个重复的字符
  2. 优化方案:

    • 使用数组代替哈希表(更高效)
    • 使用布尔数组标记是否出现
    • 第一次遍历就能找到结果

代码

class FirstRepeat {
public:
    char findFirstRepeat(string A, int n) {
        vector<bool> seen(256, false);  // 假设ASCII字符
        
        // 遍历字符串
        for(char c : A) {
            // 如果字符已经出现过,返回该字符
            if(seen[c]) {
                return c;
            }
            // 标记字符已出现
            seen[c] = true;
        }
        
        return ' ';  // 不会执行到这里,因为题目保证有重复字符
    }
};
import java.util.*;

public class FirstRepeat {
    public char findFirstRepeat(String A, int n) {
        boolean[] seen = new boolean[256];  // 假设ASCII字符
        
        // 遍历字符串
        for(char c : A.toCharArray()) {
            // 如果字符已经出现过,返回该字符
            if(seen[c]) {
                return c;
            }
            // 标记字符已出现
            seen[c] = true;
        }
        
        return ' ';  // 不会执行到这里,因为题目保证有重复字符
    }
}

class FirstRepeat:
    def findFirstRepeat(self, A, n):
        # init set to store seen chars
        seen = set()
        
        # iterate through string
        for c in A:
            if c in seen:
                return c
            seen.add(c)
        
        return ' '


算法及复杂度

  • 算法:哈希表/数组标记
  • 时间复杂度:,其中 为字符串长度
  • 空间复杂度:,使用固定大小的数组/集合