首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C語言查找首個唯一字符:ASCII 計數數組法 O(n)

     編輯:關於C語言

C語言查找首個唯一字符:ASCII 計數數組法 O(n)

在字符串中找出第一個只出現一次的字符。如 "abaccdeff" → 'b'。利用 ASCII 碼範圍小 (0-255) 建立計數數組,兩遍掃描 O(n)。

算法邏輯

  1. 建立 int count[256] = {0}
  2. 第一遍:統計每字符出現次數
  3. 第二遍:順序掃描,首個 count[c]==1 即為答案

完整代碼

#include <stdio.h>

char first_unique(char *s) {
    int count[256] = {0};
    for (int i = 0; s[i]; i++) count[(unsigned char)s[i]]++;
    for (int i = 0; s[i]; i++) if (count[(unsigned char)s[i]] == 1) return s[i];
    return '\0';  // 無唯一字符
}

int main() {
    char s[100];
    scanf("%s", s);
    char c = first_unique(s);
    if (c) printf("首個唯一字符:%c\n", c);
    else printf("無唯一字符\n");
    return 0;
}

運行示例

輸入:abaccdeff
統計:a:2, b:1, c:2, d:1, e:1, f:2
掃描:a(2)→b(1) 命中
輸出:b

關鍵點

  • (unsigned char) 強轉避免負索引 (char 有符號時)
  • 時間 O(n),空間 O(1) (固定 256)
  • 適用 ASCII/擴展 ASCII,Unicode 需哈希表
  • 面試高頻題 (劍指 Offer 50 / LeetCode 387)

擴展:返回索引版本

int first_unique_idx(char *s) {
    int count[256] = {0};
    for (int i=0; s[i]; i++) count[(uchar)s[i]]++;
    for (int i=0; s[i]; i++) if (count[(uchar)s[i]]==1) return i;
    return -1;
}
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved