[Leetcode]数据结构题目集第六天
这次题目有三题,分别是字符串中的第一个唯一字符
、赎金信
和有效的字母异位词
.
今天三道题目的思路都差不多,感觉都是两个数组的交集 II
的变形,内容篇幅可能比较长,目录可以快速定位到对应题目的解题思路&题解.
字符串中的第一个唯一字符
给定一个字符串,找到它的第一个不重复的字符,并返回它的索引。如果不存在,则返回 -1。
示例:
1 | s = "leetcode" |
解题思路&题解
拿到题目的第一反应是和之前两个数组的交集 II
一样的思路。
通过哈希表记录元素出现的下标,然后扫码字符串找出出现的次数为1的元素,然后返回该元素的下标。
大致思路:
- 数组0-25表示’a’ -> ‘z’
- 哈希表使用一个26长度的数组表示
- 数组内容表示元素出现次数
代码如下:
1 | func firstUniqChar(s string) int { |
赎金信
给定一个赎金信 (ransom) 字符串和一个杂志(magazine)字符串,判断第一个字符串 ransom 能不能由第二个字符串 magazines 里面的字符构成。如果可以构成,返回 true ;否则返回 false。
(题目说明:为了不暴露赎金信字迹,要从杂志上搜索各个需要的字母,组成单词来表达意思。杂志字符串中的每个字符只能在赎金信字符串中使用一次。)
示例 1:
1 | 输入:ransomNote = "a", magazine = "b" |
示例 2:
1 | 输入:ransomNote = "aa", magazine = "ab" |
示例 3:
1 | 输入:ransomNote = "aa", magazine = "aab" |
解题思路&题解
这题与上一题差不多,思路上甚至更像两个数组的交集 II
,也是通过一个数组哈希表存储字符出现的次数。
第二次遍历的时候将数组内容减一,当内容为0时表示内容不够则返回false
代码如下:
1 | func canConstruct(ransomNote string, magazine string) bool { |
有效的字母异位词
给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。
注意:若s
和t
中每个字符出现的次数都相同,则称s
和t
互为字母异位词。
示例 1:
1 | 输入: s = "anagram", t = "nagaram" |
示例 2:
1 | 输入: s = "rat", t = "car" |
解题思路&题解
这题应该就是两个数组的交集 II
的变形了,今天这三题整体上思路都没啥区别,不过多赘述了。
代码如下:
1 | func isAnagram(s string, t string) bool { |