给定一个字符串,找到它的第一个不重复的字符,并返回它的索引。如果不存在,则返回 -1。用DEVc++实现
时间: 2023-11-24 17:19:17 浏览: 34
好的,下面是 DEV-C++ 的代码实现:
```cpp
#include <iostream>
#include <string>
#include <unordered_map>
using namespace std;
int firstUniqChar(string s) {
unordered_map<char, int> charCount;
for (char c : s) {
charCount[c]++;
}
for (int i = 0; i < s.length(); i++) {
if (charCount[s[i]] == 1) {
return i;
}
}
return -1;
}
int main() {
string s = "leetcode";
int result = firstUniqChar(s);
cout << result << endl; // 输出 0
return 0;
}
```
这个函数的实现和上面的 C++ 代码是一样的。你可以在 DEV-C++ 中创建一个新的 C++ 项目,然后将这个代码复制到 `main.cpp` 中,然后编译运行即可。
相关问题
Python给定一个字符串,找到它的第一个不重复的字符,并返回它的索引。如果不存在,则返回 -1。
给定一个字符串,找到它的第一个不重复的字符,并返回它的索引。如果不存在,则返回 -1。
方法一:
```python
def first_not_repeating_char(strings):
chars = []
times = []
for s in strings:
if s not in chars:
chars.append(s)
times.append(1)
else:
char_index = chars.index(s)
times[char_index] += 1
for t in times:
if t == 1:
times_index = times.index(t)
return chars[times_index]
return -1
strings = input('请输入长字符串:')
print('结果:', first_not_repeating_char(strings))
```
方法二:
```python
from collections import Counter
def deal_str(s):
counter = Counter(s)
singles = [_c for _c, _i in counter.items() if _i == 1]
idxs = [s.index(_c) for _c in singles]
idx = min(idxs) if idxs else -1
print(f"字符串({s})中的第一个不重复字符的位置是({idx})")
string = "abcab"
deal_str(string)
```
方法三:
```python
def deal_str2(s):
my_dict = {}
idx = -1
for _i, _c in enumerate(s):
if _c not in my_dict:
my_dict[_c] = _i
else:
my_dict[_c] = 9999
idx = min(my_dict.values())
idx = -1 if idx >= 9999 else idx
print(f"字符串({s})中的第一个不重复字符的位置是({idx})")
string = "abcab"
deal_str2(string)
```
给定一个字符串,找到它的第一个不重复的字符,输出它的索引。如果不存在这种字符或空串,则返回 -1。
### 回答1:
题目要求在给定字符串中找到第一个不重复的字符,并输出它的索引。如果字符串为空或不存在这样的字符,则返回 -1。
例如,对于字符串 "leetcode",第一个不重复的字符是 'l',它的索引是 0。而对于字符串 "loveleetcode",第一个不重复的字符是 'v',它的索引是 2。
如果字符串中所有字符都是重复的,那么返回 -1。例如,对于字符串 "aabbcc",所有字符都是重复的,因此返回 -1。
需要遍历字符串,记录每个字符出现的次数。然后再次遍历字符串,找到第一个出现次数为 1 的字符,输出它的索引即可。如果没有这样的字符,则返回 -1。
### 回答2:
题目中要求我们找到一个字符串中第一个不重复的字符,并返回它的索引值,如果不存在这样的字符,就返回-1。那我们该怎样做呢?
我们可以遍历字符串中的每一个字符,用一个哈希表来记录每个字符出现的次数。接着,我们再次遍历字符串中的每一个字符,找到第一个在哈希表中出现次数为1的字符,即为答案。
值得注意的是,我们需要用哈希表来记录每个字符出现的次数,而不是直接在数组中记录。因为字符串中的字符可能不止128个,而是包含了许多不同的Unicode字符,如果用数组来记录每个字符出现的次数的话,会占用大量的内存空间。
另外,我们需要保证字符串中的字符在哈希表中的顺序和它们在字符串中的顺序一样,这样才能找到第一个不重复的字符。
下面是一个详细的实现代码:
```python
def first_unique_char(s: str) -> int:
# 统计每个字符出现的次数
char_count = {}
for char in s:
char_count[char] = char_count.get(char, 0) + 1
# 找到第一个不重复的字符
for i in range(len(s)):
if char_count[s[i]] == 1:
return i
# 如果没有找到,返回-1
return -1
```
时间复杂度是O(n),其中n是字符串的长度,因为我们需要遍历字符串两次。空间复杂度也是O(n),因为哈希表中要存储每个字符出现的次数。
### 回答3:
题目要求我们在一个给定的字符串中找到第一个不重复的字符,并输出其在字符串中的索引。如果不存在这样的字符,就输出-1。
首先,我们需要遍历一遍字符串,统计每个字符出现的次数,并将结果存储在一个哈希表中。然后,我们再遍历一遍字符串,找到第一个出现次数为1的字符,并返回其索引。
如果第二次遍历时没有找到出现次数为1的字符,则说明该字符串中所有字符都是重复的,因此返回-1。
以下是Python实现代码:
```
def firstUniqueChar(s: str) -> int:
counter = {}
# 统计每个字符出现的次数
for c in s:
if c in counter:
counter[c] += 1
else:
counter[c] = 1
# 找到第一个出现次数为1的字符
for i in range(len(s)):
if counter[s[i]] == 1:
return i
return -1
s = "leetcode"
print(firstUniqueChar(s)) # 输出 0
s = "loveleetcode"
print(firstUniqueChar(s)) # 输出 2
s = "aabbc"
print(firstUniqueChar(s)) # 输出 -1
```
此算法时间复杂度为O(N),空间复杂度为O(N)。其中N为字符串长度。