【剑指Offer学习】【面试题35:第一个只出现一次的字符】

2018-01-30  本文已影响24人  林大鹏

题目:

在字符串中找出第一个只出现一次的字符。

思路:

代码:

#import <Foundation/Foundation.h>

/**
 找到 第一个不重复出现的字符

 @param charArray 字符数组
 @param charArrayLength 字符数组长度
 @return 返回第一个不重复 出现的字符
 */
char firstNotRepeatingChar(char *charArray, int charArrayLength) {
    if (charArray == NULL) {
        return '\0';
    }
    
    if (charArrayLength <= 0) {
        return '\0';
    }
    
    if (charArrayLength == 1) {
        return charArray[0];
    }
    
    // 保存 字符数组 第一个字符 位置
    char *firstCharAddress = charArray;
    int hashTable[256];
    memset(hashTable, 0, sizeof(hashTable));
    
    while (*charArray != '\0') {
        //ASCII值在128-255之间的的字符,
        //用char保存,转化为int型,在-128--1之间
        int index;
        if(*charArray >= 0)
            index = *charArray;
        else {
            index = *charArray + 256;
        }
        
        hashTable[index] ++;
        ++charArray;
    }
    // 赋值 字符 数组
    charArray = firstCharAddress;
    while (*charArray != '\0') {
        int index;
        if(*charArray >= 0)
            index = *charArray;
        else {
            index = *charArray + 256;
        }
        
        if (hashTable[index] == 1) {
            return *charArray;
        }
        ++charArray;
    }
    return '\0';
    
}
int main(int argc, const char * argv[]) {
    @autoreleasepool {
        char str1[] = "They are students";
        printf("%c\n", firstNotRepeatingChar(str1, sizeof(str1)));
    }
    return 0;
}
上一篇 下一篇

猜你喜欢

热点阅读