第一个只出现一次的字符 一个只包含小写字母的字符串,请找出第一个只出现一次的字符,并返回索引,如果这样的字符不存在返回-1,不允许使用字典 输入: abcacd 输出: 1 解释: 出现一次的字符是 b 和 d,b是第一个出现的python
时间: 2023-10-30 12:21:10 浏览: 39
可以使用 Python 中的 Counter 类来实现。Counter 类可以方便地统计一个可迭代对象中每个元素出现的次数。具体实现如下:
```python
from collections import Counter
def first_unique_char(s):
# 统计每个字符出现的次数
counter = Counter(s)
# 遍历字符串,返回第一个出现次数为 1 的字符的索引
for i in range(len(s)):
if counter[s[i]] == 1:
return i
# 如果没有出现次数为 1 的字符,返回 -1
return -1
```
使用示例:
```python
s = 'abcacd'
print(first_unique_char(s)) # 输出:1
```
时间复杂度为 $O(n)$,其中 $n$ 是字符串的长度。
相关问题
用c语言找第一个只出现一次的字符 描述给定一个只包含小写字母的字符串,请你找到第一个仅出现一次的字符。如果没有,输出no。 输入一个字符串,长度小于100000。输出输出第一个仅出现一次的字符,若没有则输出no。
好的,这是一个经典的字符串问题,可以使用C语言来解决。我可以给你提供一个简单的算法来解决这个问题,步骤如下:
1. 创建一个长度为26的数组,用来记录每个字母出现的次数。
2. 遍历字符串,将每个字母出现的次数记录在数组中。
3. 再次遍历字符串,找出第一个在数组中出现次数为1的字母。
4. 如果找到了,输出该字母,否则输出no。
下面是相应的C语言代码实现:
```c
#include <stdio.h>
#include <string.h>
int main()
{
char str[100001];
int count[26] = {0};
int i, len;
printf("请输入一个字符串:");
gets(str);
len = strlen(str);
for (i = 0; i < len; i++) {
count[str[i] - 'a']++;
}
for (i = 0; i < len; i++) {
if (count[str[i] - 'a'] == 1) {
printf("第一个仅出现一次的字符是:%c\n", str[i]);
return 0;
}
}
printf("没有仅出现一次的字符!\n");
return 0;
}
```
请注意,这个算法的时间复杂度为O(n),其中n为字符串的长度。
给定一个只包含小写字母的字符串,请你找出第一个仅出现一次的字符,如果没有,输出no
对于这个问题,你可以采用哈希表的方式进行解决,具体流程如下:
1. 遍历字符串,统计每个字符出现的次数并存入哈希表中。
2. 再次遍历字符串,查找第一个在哈希表中出现次数为 1 的字符,并返回该字符。
3. 如果哈希表中不存在出现次数为 1 的字符,则返回 no。
以下是参考代码实现:
```
def firstUniqueChar(s: str) -> str:
freq = {}
for c in s:
freq[c] = freq.get(c, 0) + 1
for c in s:
if freq[c] == 1:
return c
return "no"
```
希望能解决你的问题!
阅读全文