您好,登录后才能下订单哦!
密码登录
登录注册
点击 登录注册 即表示同意《亿速云用户服务条款》
# 如何编写代码找到一个字符串中第一个不重复的字符
在编程面试和实际开发中,处理字符串是常见任务。本文将详细介绍如何编写高效算法来找到字符串中第一个不重复的字符,并提供多种语言实现示例。
## 问题描述
给定一个字符串(假设只包含小写字母,但方法可扩展),找到其中第一个不重复的字符并返回其索引。如果不存在则返回特定标识(如-1)。
示例:
- 输入:"leetcode" → 返回 0('l'是第一个不重复字符)
- 输入:"loveleetcode" → 返回 2('v'是第一个不重复字符)
- 输入:"aabb" → 返回 -1
## 算法思路
### 方法一:哈希表两次遍历法
**时间复杂度O(n),空间复杂度O(1)**(因为字母表大小固定)
1. **第一次遍历**:使用哈希表记录每个字符出现的次数
2. **第二次遍历**:查找哈希表中值为1的第一个字符
```python
def first_uniq_char(s: str) -> int:
freq = {}
for char in s:
freq[char] = freq.get(char, 0) + 1
for i, char in enumerate(s):
if freq[char] == 1:
return i
return -1
优化第二次遍历过程:
def first_uniq_char(s: str) -> int:
freq = {}
for i, char in enumerate(s):
if char in freq:
freq[char] = -1 # 标记重复
else:
freq[char] = i # 存储首次出现位置
for pos in freq.values():
if pos != -1:
return pos
return -1
import java.util.HashMap;
public class Solution {
public int firstUniqChar(String s) {
HashMap<Character, Integer> map = new HashMap<>();
for (int i = 0; i < s.length(); i++) {
char c = s.charAt(i);
map.put(c, map.getOrDefault(c, 0) + 1);
}
for (int i = 0; i < s.length(); i++) {
if (map.get(s.charAt(i)) == 1) {
return i;
}
}
return -1;
}
}
function firstUniqChar(s) {
const freq = {};
for (const char of s) {
freq[char] = (freq[char] || 0) + 1;
}
for (let i = 0; i < s.length; i++) {
if (freq[s[i]] === 1) return i;
}
return -1;
}
对于超长字符串可以考虑: - 提前终止:找到第一个不重复字符后立即返回 - 空间优化:如果字符串只包含字母,可用长度26的数组代替哈希表
def first_uniq_char(s: str) -> int:
count = [0] * 26
for c in s:
count[ord(c) - ord('a')] += 1
for i, c in enumerate(s):
if count[ord(c) - ord('a')] == 1:
return i
return -1
本文介绍了通过哈希表解决该问题的标准方法,给出了多语言实现,并讨论了优化策略。关键点在于: - 合理选择数据结构 - 注意时间/空间复杂度平衡 - 处理各种边界情况
掌握此类字符串处理技巧能显著提升编程能力和面试表现。 “`
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。