C语言字符串中的第一个唯一字符 【问题描述】 给定一个字符串,找到它的第一个不重复的字符,并返回它的索引。如果不存在,则返回 -1。 约束条件: (1) 0<=S.length<=300000 (2) 字符串中只包含小写字母 【输入形式】 输入一个字符串 【输出形式】 输出索引对应数字 【样例输入1】 leetcode 【样例输出1】 0 【样例输入2】 loveleetcode 【样例输出2】 2
时间: 2024-03-07 14:50:02 浏览: 32
下面是求解字符串中第一个唯一字符的函数实现代码:
```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。
相关问题
给定一个字符串,在字符串中找到第一个连续出现至少k次的字符。C语言
可以使用哈希表来解决这个问题。首先需要遍历一遍字符串,统计每个字符出现的次数,然后再遍历一遍字符串,找到第一个出现至少k次的字符。
以下是C语言代码实现:
```c
#include <stdio.h>
#include <string.h>
#define MAXN 100005
#define MAXC 26
int cnt[MAXC]; // 记录每个字符出现的次数
int main() {
char s[MAXN];
int k;
scanf("%d %s", &k, s);
int n = strlen(s);
int l = 0, r = 0, ans = -1;
while (r < n) {
cnt[s[r] - 'a']++; // 统计字符出现次数
while (l <= r && cnt[s[r] - 'a'] >= k) { // 找到第一个出现至少k次的字符
if (ans == -1 || ans > l) ans = l; // 更新答案
cnt[s[l] - 'a']--; // 左指针右移,更新字符出现次数
l++;
}
r++;
}
printf("%d\n", ans);
return 0;
}
```
该算法的时间复杂度为$O(n)$,其中$n$为字符串的长度。
编写一个C语言程序,去掉给定字符串中重复的字符
下面是一个示例程序,演示如何去掉给定字符串中重复的字符:
```c
#include <stdio.h>
#include <string.h>
void removeDuplicates(char* str) {
int len = strlen(str);
int index = 0;
for (int i = 0; i < len; i++) {
int j;
for (j = 0; j < i; j++) {
if (str[i] == str[j]) {
break;
}
}
if (j == i) {
str[index++] = str[i];
}
}
str[index] = '\0';
}
int main() {
char str[100];
printf("Enter a string: ");
fgets(str, sizeof(str), stdin);
// 去掉换行符
if (str[strlen(str) - 1] == '\n') {
str[strlen(str) - 1] = '\0';
}
removeDuplicates(str);
printf("String after removing duplicates: %s\n", str);
return 0;
}
```
该程序首先使用 `fgets` 函数从用户输入中读取字符串,并将其存储在 `str` 数组中。然后,通过调用 `removeDuplicates` 函数去除字符串中的重复字符。最后,输出去重后的字符串。
`removeDuplicates` 函数使用两个嵌套的 `for` 循环来遍历字符串。内层循环用于检查当前字符是否与之前的字符重复,如果没有重复,则将其存储到结果字符串中。最后,将结果字符串的末尾设置为 null 终止符,以确保字符串的正确结束。
希望这个示例能满足你的需求。如果还有其他问题,请随时提问。