leetcode 剑指 Offer 50. 第一个只出现一次的字符

字符串 同时被 2 个专栏收录
89 篇文章 0 订阅
75 篇文章 1 订阅

【题目】剑指 Offer 50. 第一个只出现一次的字符

在字符串 s 中找出第一个只出现一次的字符。如果没有,返回一个单空格。 s 只包含小写字母。

示例:

s = "abaccdeff"
返回 "b"

s = "" 
返回 " "

限制:
0 <= s 的长度 <= 50000

【解题思路1】计数数组

也可以使用HashMap

class Solution {
    public char firstUniqChar(String s) {
        int[] count = new int[26];
        for(char c : s.toCharArray()){
            count[c - 'a']++;
        }
        for(char c : s.toCharArray()){
            if(count[c - 'a'] == 1){
                return c;
            }
        }
        return ' ';
    }
}

时间复杂度:O(N)。N 为字符串 s 的长度;需遍历 s 两轮,使用 O(N) ;计数数组查找操作的复杂度为 O(1) ;
空间复杂度:O(1)。由于题目指出 s 只包含小写字母,因此最多有 26 个不同字符,计数数组存储需占用 O(26) = O(1)的额外空间。

  • 0
    点赞
  • 0
    评论
  • 0
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

相关推荐
©️2020 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值