[10]在一个字符串中找到第一个只出现一次的字符

    技术2025-04-16  15

    【题目】在一个字符串中找到第一个只出现一次的字符。

    【思路1】穷举法,对每个字符遍历其余的字符。

    【思路2】 需要一个数据容器来存放每个字符的出现次数。由于字符( char) 是一个长度为 8 的数据类型,因此总共有可能 256 种可能。于是我们创建一个长度为 256 的数组,每个字母根据其 ASCII 码值作为数组的下标对应数组的对应项,而数组中存储的是每个字符对应的次数。我们第一遍扫描这个数组时,每碰到一个字符,在哈希表中找到对应的项并把出现的次数增加一次。这样在进行第二次扫描时,就能直接从哈希表中得到每个字符出现的次数了。(该方法只能统计出唯一的字符,不能保证是第一个)

    【代码】

    char FirstOnlyChar1(char *p) { bool tag = true; for(int i=0;i<strlen(p);i++) { tag = true; for(int j=i+1;j<strlen(p);j++) { if(p[i] == p[j]) { tag = false; break; } } for(int j=0;j<i;j++) { if(p[i] == p[j]) { tag = false; break; } } if(tag) return p[i]; } return NULL; } char FirstOnlyChar2(char *p) { int b[256]; memset(b,0,sizeof(int)*256); for(int i=0; i< strlen(p);i++) b[p[i]]++; for(int i=0;i<256;i++) if(b[i]==1) return i; return NULL; } void main(int argc, _TCHAR* argv[]) { char *a = "abcdefadkjc12ekbj323jjj" ; cout<<FirstOnlyChar1(a)<<endl; cout<<FirstOnlyChar2(a)<<endl; return ; }

    最新回复(0)