在一个字符串(0<=字符串长度<=10000,全部只由字母组成)中找到第一个只出现一次的字符,并返回它的位置, 如果没有则返回 -1(需要区分大小写)。(从0开始计数)
时间: 2024-04-15 07:32:06 浏览: 17
你可以使用Python的内置模块collections中的Counter来解决这个问题。Counter可以快速统计字符串中每个字符出现的次数。然后,再次遍历字符串,找到第一个出现次数为1的字符,返回其位置。
下面是一个示例代码:
```python
from collections import Counter
def find_first_unique_char(s):
char_count = Counter(s)
# 找到第一个出现次数为1的字符
for i in range(len(s)):
if char_count[s[i]] == 1:
return i
return -1
# 测试
s = "abccba"
print(find_first_unique_char(s)) # 输出 2
s = "abcabc"
print(find_first_unique_char(s)) # 输出 -1
```
在这个示例中,我们首先使用Counter统计字符串`s`中每个字符的出现次数,并保存在字典`char_count`中。然后,我们再次遍历字符串`s`,找到第一个出现次数为1的字符,并返回其位置。如果没有找到满足条件的字符,则返回-1。
注意:该解法时间复杂度为O(n),其中n为字符串的长度。
相关问题
在一个字符串(0<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符,并返回它的位置, 如果没有则返回 -1(需要区分大小写)。怎么编写python程序
可以使用Python的字典来解决这个问题。首先,我们可以遍历字符串中的每个字符,并将其作为字典的键,出现的次数作为字典的值。然后,再次遍历字符串,找到第一个出现次数为1的字符,返回其位置。
下面是一个示例代码:
```python
def find_first_unique_char(s):
char_count = {}
# 计算每个字符出现的次数
for char in s:
if char in char_count:
char_count[char] += 1
else:
char_count[char] = 1
# 找到第一个出现次数为1的字符
for i in range(len(s)):
if char_count[s[i]] == 1:
return i
return -1
# 测试
s = "abccba"
print(find_first_unique_char(s)) # 输出 2
s = "abcabc"
print(find_first_unique_char(s)) # 输出 -1
```
在这个示例中,我们首先创建了一个空字典`char_count`来存储每个字符的出现次数。然后,我们遍历字符串`s`中的每个字符,如果字符已经在字典中,则将其对应的值加1;否则,在字典中创建该字符,并将其对应的值设为1。接下来,我们再次遍历字符串`s`,找到第一个出现次数为1的字符,并返回其位置。如果没有找到满足条件的字符,则返回-1。
注意:该解法时间复杂度为O(n),其中n为字符串的长度。
在一个长为n的字符串中找到第一个只出现一次的字符,并输出它的位置,如果没有则输出-1(需要区分大小写)n的范围是0~10000,并且字符串只有字母组成
如果字符串长度为n,且只包含字母,我们可以使用一个长度为26的数组来存储每个字母出现的次数。遍历字符串,统计每个字母出现的次数,然后再次遍历字符串,找到第一个出现次数为1的字母,并输出它的位置。
代码如下:
```python
def find_first_unique_char(s):
char_count = [0] * 26
char_index = [-1] * 26
for i, c in enumerate(s):
index = ord(c) - ord('a')
char_count[index] += 1
char_index[index] = i
min_index = float('inf')
for i, c in enumerate(s):
index = ord(c) - ord('a')
if char_count[index] == 1 and char_index[index] < min_index:
min_index = char_index[index]
if min_index == float('inf'):
return -1
return min_index
```
调用示例:
```python
s = "abaccdeff"
print(find_first_unique_char(s)) # 输出 1
```
如果字符串中没有只出现一次的字符,则会返回-1。