【算法千题案例】每日LeetCode打卡——70.字符串中的第一个唯一字符

简介: 📢前言🌲原题样例:字符串中的第一个唯一字符🌻C#方法🌻Java 方法:使用哈希表存储频数💬总结

📢前言

🚀 算法题 🚀

🌲 每天打卡一道算法题,既是一个学习过程,又是一个分享的过程😜

🌲 提示:本专栏解题 编程语言一律使用 C# 和 Java 两种进行解题

🌲 要保持一个每天都在学习的状态,让我们一起努力成为算法大神吧🧐!

🌲 今天是力扣算法题持续打卡第70天🎈!

🚀 算法题 🚀

🌲原题样例:字符串中的第一个唯一字符

给定一个字符串,找到它的第一个不重复的字符,并返回它的索引。如果不存在,则返回 -1。

示例1:

s = "leetcode"
返回 0
s = "loveleetcode"
返回 2

提示:

  • 你可以假定该字符串只包含小写字母。

?C#方法

用数组存放当前字符串中各字符数量

代码:

public class Solution {
public int FirstUniqChar(string s) {
    int[] arr=new int[26];  //26个字母的数组
    for(int i=0;i<s.Length;i++)
    {
        arr[s[i]-'a']+=1;  //a--0 b--1………… 对应位置数字+1
    }
    for(int i=0;i<s.Length;i++)
    {
        if(arr[s[i]-'a']==1)  //当该位置数字为1
        {
            return i;
        }
    }
    return -1;
}
}

执行结果

通过
执行用时:64 ms,在所有 Java  提交中击败了99.50%的用户
内存消耗:43.4 MB,在所有 Java 提交中击败了16.50%的用户

🌻Java 方法:使用哈希表存储频数

思路解析

可以对字符串进行两次遍历。

在第一次遍历时,我们使用哈希映射统计出字符串中每个字符出现的次数。

在第二次遍历时,我们只要遍历到了一个只出现一次的字符,那么就返回它的索引,否则在遍历结束后返回 −1。

代码:

class Solution {
    public int firstUniqChar(String s) {
        Map<Character, Integer> frequency = new HashMap<Character, Integer>();
        for (int i = 0; i < s.length(); ++i) {
            char ch = s.charAt(i);
            frequency.put(ch, frequency.getOrDefault(ch, 0) + 1);
        }
        for (int i = 0; i < s.length(); ++i) {
            if (frequency.get(s.charAt(i)) == 1) {
                return i;
            }
        }
        return -1;
    }
}

执行结果

通过
执行用时:26 ms,在所有 Java  提交中击败了39.26%的用户
内存消耗:38.2 MB,在所有 Java 提交中击败了88.05%的用户

复杂度分析

时间复杂度:O( n )
空间复杂度:O( |Σ|)

💬总结

  • 今天是力扣算法题打卡的第七十天!
  • 文章采用 C#Java 两种编程语言进行解题
  • 一些方法也是参考力扣大神写的,也是边学习边分享,再次感谢算法大佬们
相关文章
|
3月前
|
算法 前端开发 数据处理
小白学python-深入解析一位字符判定算法
小白学python-深入解析一位字符判定算法
56 0
|
3月前
|
存储 分布式计算 算法
大数据-106 Spark Graph X 计算学习 案例:1图的基本计算、2连通图算法、3寻找相同的用户
大数据-106 Spark Graph X 计算学习 案例:1图的基本计算、2连通图算法、3寻找相同的用户
79 0
|
2月前
|
存储 算法 Java
leetcode算法题-有效的括号(简单)
【11月更文挑战第5天】本文介绍了 LeetCode 上“有效的括号”这道题的解法。题目要求判断一个只包含括号字符的字符串是否有效。有效字符串需满足左括号必须用相同类型的右括号闭合,并且左括号必须以正确的顺序闭合。解题思路是使用栈数据结构,遍历字符串时将左括号压入栈中,遇到右括号时检查栈顶元素是否匹配。最后根据栈是否为空来判断字符串中的括号是否有效。示例代码包括 Python 和 Java 版本。
|
3月前
|
存储 算法 搜索推荐
这些算法在实际应用中有哪些具体案例呢
【10月更文挑战第19天】这些算法在实际应用中有哪些具体案例呢
68 1
|
3月前
|
JavaScript
力扣3333.找到初始输入字符串Ⅱ
【10月更文挑战第9天】力扣3333.找到初始输入字符串Ⅱ
40 1
|
3月前
|
算法
每日一道算法题(Leetcode 20)
每日一道算法题(Leetcode 20)
36 2
|
3月前
|
C++
Leetcode第43题(字符串相乘)
本篇介绍了一种用C++实现的字符串表示的非负整数相乘的方法,通过逆向编号字符串,将乘法运算转化为二维数组的累加过程,最后处理进位并转换为字符串结果,解决了两个大数相乘的问题。
31 9
|
3月前
|
算法 C++
Leetcode第八题(字符串转换整数(atoi))
这篇文章介绍了LeetCode上第8题“字符串转换整数(atoi)”的解题思路和C++的实现方法,包括处理前导空格、正负号、连续数字字符以及整数溢出的情况。
24 0
|
3月前
【LeetCode 22】459.重复的子字符串
【LeetCode 22】459.重复的子字符串
33 0
|
3月前
【LeetCode 20】151.反转字符串里的单词
【LeetCode 20】151.反转字符串里的单词
26 0