C语言实现:【问题描述】 给定一个字符串,找到它的第一个不重复的字符,并返回它的索引。如果不存在,则返回 -1。 约束条件: (1) 0<=S.length<=300000 (2) 字符串中只包含小写字母 【输入形式】 输入一个字符串 【输出形式】 输出索引对应数字 【样例输入1】 leetcode 【样例输出1】 0 【样例输入2】 loveleetcode 【样例输出2】 2
时间: 2024-03-03 08:49:23 浏览: 119
以下是 C 语言实现的代码:
```c
#include <stdio.h>
#include <string.h>
int firstUniqChar(char* s) {
int len = strlen(s);
int freq[26] = {0};
for (int i = 0; i < len; i++) {
freq[s[i] - 'a']++;
}
for (int i = 0; i < len; i++) {
if (freq[s[i] - 'a'] == 1) {
return i;
}
}
return -1;
}
int main() {
char s[300001];
scanf("%s", s);
printf("%d", firstUniqChar(s));
return 0;
}
```
该算法的思路是使用哈希表记录每个字符出现的次数,然后再遍历一遍字符串查找第一个出现次数为 1 的字符。时间复杂度为 $O(n)$,其中 $n$ 为字符串长度。
相关问题
C语言编程问题描述】 给定一个字符串,找到它的第一个不重复的字符,并返回它的索引。如果不存在,则返回 -1。 约束条件: (1) 0<=S.length<=300000 (2) 字符串中只包含小写字母 【输入形式】 输入一个字符串 【输出形式】 输出索引对应数字 【样例输入1】 leetcode 【样例输出1】 0
这是一个字符串处理的问题,可以通过遍历字符串并使用哈希表来解决。
具体思路如下:
1. 创建一个哈希表,记录每个字符出现的次数。
2. 遍历字符串,找到第一个出现次数为1的字符,并返回它的索引。
3. 如果没有找到符合条件的字符,则返回 -1。
以下是对应的 C 语言代码实现:
```c
#include <stdio.h>
#include <string.h>
#define MAX_LEN 300000
int firstUniqChar(char* s) {
int len = strlen(s);
int count[26] = {0};
// 统计每个字符出现的次数
for (int i = 0; i < len; i++) {
count[s[i] - 'a']++;
}
// 找到第一个出现次数为1的字符
for (int i = 0; i < len; i++) {
if (count[s[i] - 'a'] == 1) {
return i;
}
}
// 没有找到符合条件的字符
return -1;
}
int main() {
char s[MAX_LEN + 1];
scanf("%s", s);
int index = firstUniqChar(s);
printf("%d\n", index);
return 0;
}
```
需要注意的是,题目中给定的字符串长度可能很大,因此需要使用动态内存分配或者字符数组来存储字符串。另外,为了避免数组越界的问题,需要在字符数组的末尾添加一个空字符 '\0'。
C语言字符串中的第一个唯一字符 【问题描述】 给定一个字符串,找到它的第一个不重复的字符,并返回它的索引。如果不存在,则返回 -1。 约束条件: (1) 0<=S.length<=300000 (2) 字符串中只包含小写字母 【输入形式】 输入一个字符串 【输出形式】 输出索引对应数字 【样例输入1】 leetcode 【样例输出1】 0 【样例输入2】 loveleetcode 【样例输出2】 2
下面是求解字符串中第一个唯一字符的函数实现代码:
```c
int firstUniqChar(char * s)
{
int freq[26] = {0}; // 存储每个字符出现的频率
// 统计每个字符出现的频率
for(int i=0; i<strlen(s); i++)
{
freq[s[i]-'a']++;
}
// 找到第一个出现频率为1的字符,并返回它的索引
for(int i=0; i<strlen(s); i++)
{
if(freq[s[i]-'a'] == 1)
{
return i;
}
}
// 如果找不到,则返回-1
return -1;
}
```
这个函数的实现思路比较简单,就是先统计每个字符出现的频率,然后从头开始遍历字符串,找到第一个出现频率为1的字符,并返回它的索引即可。如果找不到,则返回-1。
阅读全文