力扣热门算法题 349. 两个数组的交集,387. 字符串中的第一个唯一字符,394. 字符串解码

这篇具有很好参考价值的文章主要介绍了力扣热门算法题 349. 两个数组的交集,387. 字符串中的第一个唯一字符,394. 字符串解码。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

349. 两个数组的交集,387. 字符串中的第一个唯一字符,394. 字符串解码,每题做详细思路梳理,配套Python&Java双语代码, 2024.04.02 可通过leetcode所有测试用例。

目录

349. 两个数组的交集

解题思路

完整代码

Python

Java

387. 字符串中的第一个唯一字符

解题思路

完整代码

Python

Java

394. 字符串解码

解题思路

完整代码

Python

Java


349. 两个数组的交集

给定两个数组 nums1 和 nums2 ,返回 它们的 

交集

 。输出结果中的每个元素一定是  唯一 的。我们可以  不考虑输出结果的顺序 。

示例 1:

输入:nums1 = [1,2,2,1], nums2 = [2,2]
输出:[2]

示例 2:

输入:nums1 = [4,9,5], nums2 = [9,4,9,8,4]
输出:[9,4]
解释:[4,9] 也是可通过的

提示:

  • 1 <= nums1.length, nums2.length <= 1000
  • 0 <= nums1[i], nums2[i] <= 1000

解题思路

  1. 使用两个哈希集合:一个集合 set1 存储 nums1 中的元素,另一个集合 set2 用来存储 nums2 中的元素。

  2. 填充第一个集合:遍历数组 nums1,将其中的元素加入 set1。哈希集合会自动处理重复元素,确保 set1 中的元素唯一。

  3. 查找交集:遍历数组 nums2,检查每个元素是否已存在于 set1 中。如果存在,说明该元素是两个数组的交集的一部分,将其加入 set2。这样做的原因是 set2 此时用于存储交集结果,也能自动去重。

  4. 转换结果:最后,将 set2 中的元素转换成数组形式返回,这些元素就是两个数组的交集。

完整代码

Python
class Solution:
    def intersection(self, nums1: List[int], nums2: List[int]) -> List[int]:
        set1 = set(nums1)
        set2 = set()
        
        for num in nums2:
            if num in set1:
                set2.add(num)
        
        return list(set2)
Java
class Solution {
    public int[] intersection(int[] nums1, int[] nums2) {
        Set<Integer> set1 = new HashSet<>();
        Set<Integer> resultSet = new HashSet<>();
        
        // 填充第一个集合
        for (int num : nums1) {
            set1.add(num);
        }
        
        // 查找交集
        for (int num : nums2) {
            if (set1.contains(num)) {
                resultSet.add(num);
            }
        }
        
        // 转换结果
        int[] result = new int[resultSet.size()];
        int i = 0;
        for (int num : resultSet) {
            result[i++] = num;
        }
        
        return result;
    }
}

力扣热门算法题 349. 两个数组的交集,387. 字符串中的第一个唯一字符,394. 字符串解码,python,算法,leetcode,leetcode,算法,职场和发展

387. 字符串中的第一个唯一字符

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

示例 1:

输入: s = "leetcode"
输出: 0

示例 2:

输入: s = "loveleetcode"
输出: 2

示例 3:

输入: s = "aabb"
输出: -1

解题思路

  1. 统计字符频率:遍历字符串 s 一次,使用哈希表(如 Python 中的字典或 Java 中的 HashMap)来统计每个字符出现的次数。

  2. 找到第一个不重复字符:再次遍历字符串 s,使用之前构建的哈希表来检查每个字符的频率。第一个频率为 1 的字符就是我们要找的第一个不重复字符,此时返回它的索引。

  3. 处理未找到的情况:如果遍历结束仍未找到频率为 1 的字符,则说明没有不重复的字符,返回 -1。

完整代码

Python
class Solution:
    def firstUniqChar(self, s: str) -> int:
        # 使用哈希表统计每个字符的频率
        charCount = {}
        for char in s:
            charCount[char] = charCount.get(char, 0) + 1
        
        # 查找第一个不重复的字符
        for i, char in enumerate(s):
            if charCount[char] == 1:
                return i
        
        # 如果没有不重复的字符,返回-1
        return -1
Java
class Solution {
    public int firstUniqChar(String s) {
        // 使用哈希表统计每个字符的频率
        HashMap<Character, Integer> charCount = new HashMap<>();
        for (int i = 0; i < s.length(); i++) {
            char c = s.charAt(i);
            charCount.put(c, charCount.getOrDefault(c, 0) + 1);
        }
        
        // 查找第一个不重复的字符
        for (int i = 0; i < s.length(); i++) {
            if (charCount.get(s.charAt(i)) == 1) {
                return i;
            }
        }
        
        // 如果没有不重复的字符,返回-1
        return -1;
    }
}

394. 字符串解码

给定一个经过编码的字符串,返回它解码后的字符串。

编码规则为: k[encoded_string],表示其中方括号内部的 encoded_string 正好重复 k 次。注意 k 保证为正整数。

你可以认为输入字符串总是有效的;输入字符串中没有额外的空格,且输入的方括号总是符合格式要求的。

此外,你可以认为原始数据不包含数字,所有的数字只表示重复的次数 k ,例如不会出现像 3a 或 2[4] 的输入。

示例 1:

输入:s = "3[a]2[bc]"
输出:"aaabcbc"

示例 2:

输入:s = "3[a2[c]]"
输出:"accaccacc"

示例 3:

输入:s = "2[abc]3[cd]ef"
输出:"abcabccdcdcdef"

示例 4:

输入:s = "abc3[cd]xyz"
输出:"abccdcdcdxyz"

解题思路

  1. 创建两个栈:一个用于保存数字(即重复次数),另一个用于保存字符串。

  2. 遍历输入字符串:对每个字符进行处理:

    • 如果遇到数字,解析整个数字(因为数字可能超过一位),并将其压入数字栈。
    • 如果遇到字母,将其添加到当前字符串中。
    • 如果遇到'[',表示一个新的编码字符串的开始,因此需要将当前字符串压入字符串栈,然后重置当前字符串。
    • 如果遇到']',表示一个编码字符串的结束,此时应从数字栈中弹出一个数字,表示重复次数,并从字符串栈中弹出字符串(如果有的话),将当前字符串重复指定次数后,与弹出的字符串连接起来,更新当前字符串。
  3. 返回解码后的字符串:遍历完成后,当前字符串即为解码后的字符串。文章来源地址https://www.toymoban.com/news/detail-844682.html

完整代码

Python
class Solution:
    def decodeString(self, s: str) -> str:
        numStack = []  # 存储重复次数
        strStack = []  # 存储字符串
        currentNum = 0
        currentStr = ''
        
        for char in s:
            if char.isdigit():
                currentNum = currentNum * 10 + int(char)  # 构建多位数
            elif char == '[':
                # 遇到 '[',将当前数字和字符串分别压栈,然后重置
                numStack.append(currentNum)
                strStack.append(currentStr)
                currentNum, currentStr = 0, ''
            elif char == ']':
                # 遇到 ']',弹出栈顶数字,重复当前字符串,并与栈顶字符串连接
                num = numStack.pop()
                prevStr = strStack.pop()
                currentStr = prevStr + num * currentStr
            else:
                currentStr += char  # 构建字符串
        
        return currentStr
Java
class Solution {
    public String decodeString(String s) {
        Stack<Integer> numStack = new Stack<>();
        Stack<String> strStack = new Stack<>();
        String currentStr = "";
        int currentNum = 0;
        
        for (char ch : s.toCharArray()) {
            if (Character.isDigit(ch)) {
                currentNum = currentNum * 10 + (ch - '0');
            } else if (ch == '[') {
                // 遇到 '[',将当前数字和字符串分别压栈,然后重置
                numStack.push(currentNum);
                strStack.push(currentStr);
                currentNum = 0;
                currentStr = "";
            } else if (ch == ']') {
                // 遇到 ']',弹出栈顶数字,重复当前字符串,并与栈顶字符串连接
                StringBuilder tempStr = new StringBuilder(strStack.pop());
                int repeatTimes = numStack.pop();
                for (int i = 0; i < repeatTimes; i++) {
                    tempStr.append(currentStr);
                }
                currentStr = tempStr.toString();
            } else {
                currentStr += ch;
            }
        }
        
        return currentStr;
    }
}

到了这里,关于力扣热门算法题 349. 两个数组的交集,387. 字符串中的第一个唯一字符,394. 字符串解码的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • LeetCode349. 两个数组的交集

    数组哈希.无序set都可以 给定两个数组 nums1 和 nums2 ,返回 它们的交集 。输出结果中的每个元素一定是 唯一 的。我们可以 不考虑输出结果的顺序 。 示例 1: 输入:nums1 = [1,2,2,1], nums2 = [2,2] 输出:[2] 示例 2: 输入:nums1 = [4,9,5], nums2 = [9,4,9,8,4] 输出:[9,4] 解释:[4,9] 也是可通

    2024年01月23日
    浏览(25)
  • 算法训练第5天|哈希表理论基础 242.有效的字母异位词 349. 两个数组的交集 202. 快乐数 1. 两数之和

    哈希表是根据 关键码 的值而直接进行访问的数据结构。 一般哈希表都是用来快速判断一个元素是否出现集合里。 数组、集合set、映射map 力扣链接 题目描述: 给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。 注意: 若  s  和  t   中每个字符出现的

    2024年02月19日
    浏览(33)
  • Leetcode:349. 两个数组的交集【题解超详细】

    题目 给定两个数组  nums1  和  nums2  ,返回  它们的交集  。输出结果中的每个元素一定是  唯一  的。我们可以  不考虑输出结果的顺序  。 难度: 简单 题目链接:349.两个数组的交集 示例 1: 示例 2: 提示: 1 = nums1.length, nums2.length = 1000 0 = nums1[i], nums2[i] = 1000 思路解析

    2024年02月09日
    浏览(24)
  • 力扣(LeetCode)算法_C++—— 两个数组的交集

    给定两个数组 nums1 和 nums2 ,返回 它们的交集 。输出结果中的每个元素一定是 唯一 的。我们可以 不考虑输出结果的顺序 。 示例 1: 输入:nums1 = [1,2,2,1], nums2 = [2,2] 输出:[2] 示例 2: 输入:nums1 = [4,9,5], nums2 = [9,4,9,8,4] 输出:[9,4] 解释:[4,9] 也是可通过的

    2024年02月09日
    浏览(26)
  • 看完这篇文章你就彻底懂啦{保姆级讲解}-----(LeetCode刷题349两个数组的交集) 2023.5.9

    本文章一部分内容参考于《代码随想录》----如有侵权请联系作者删除即可,撰写本文章主要目的在于记录自己学习体会并分享给大家,全篇并不仅仅是复制粘贴,更多的是加入了自己的思考,希望读完此篇文章能真正帮助到您!!! 力扣题目链接 分析题目: 什么是哈希表?

    2024年02月04日
    浏览(43)
  • ● day5:哈希表理论基础 242.有效的字母异位词 349. 两个数组的交集 202. 快乐数 1. 两数之和

    ● 哈希表理论基础 ● 242.有效的字母异位词 ● 349. 两个数组的交集 ● 202. 快乐数 ● 1. 两数之和 哈希表理论基础 建议:大家要了解哈希表的内部实现原理,哈希函数,哈希碰撞,以及常见哈希表的区别,数组,set 和map。 什么时候想到用哈希法, 当我们遇到了要快速判断一

    2024年02月05日
    浏览(38)
  • Day 6 哈希表part01:242.有效的字母异位词 , 349. 两个数组的交集 , 202. 快乐数, 1. 两数之和

    哈希表理论基础  要了解哈希表的内部实现原理,哈希函数,哈希碰撞,以及常见哈希表的区别,数组,set 和map。   什么时候想到用哈希法,当我们遇到了 要快速判断一个元素是否出现集合里的时候 ,就要考虑 哈希法 。  这句话很重要,大家在做哈希表题目都要思考这

    2024年02月15日
    浏览(35)
  • 两个数组的交集(力扣刷题)

            给定两个数组  nums1  和  nums2  ,返回  它们的交集  。输出结果中的每个元素一定是  唯一  的。我们可以  不考虑输出结果的顺序  。 来源:力扣(LeetCode) 链接:https://leetcode.cn/problems/intersection-of-two-arrays   说明:  输出结果中的每个元素一定是唯一的。

    2023年04月09日
    浏览(29)
  • 代码随想录二刷 day06 | 哈希表之 242.有效的字母异位词 349. 两个数组的交集 202. 快乐数 1. 两数之和

    哈希表能解决什么问题呢?一般哈希表都是用来快速判断一个元素是否出现集合里。 242.有效的字母异位词 题目链接 解题思路: 题目的意思就是 判断两个字符串是否由相同字母组成。 字符a到字符z的ASCII是26个连续的数值,所以字符a映射为下标0,相应的字符z映射为下标25。

    2024年02月07日
    浏览(35)
  • 【代码随想录】Day6 哈希表理论基础 242.有效的字母异位词 ,349. 两个数组的交集 202. 快乐数 1. 两数之和

    【代码随想录】Day6 哈希表理论基础 242.有效的字母异位词 ,349. 两个数组的交集 202. 快乐数 1. 两数之和 新的一部分-哈希表,哈希表之前做题相对比较熟练希望能快速复习 Source: 题目 Note:以前刷的时候使用python字典,这次换做C++ 注意数组就是简单的哈希表,但是数组的大小

    2024年02月20日
    浏览(33)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包