【Leetcode -383.赎金信 -387.字符串中的第一个唯一字符】

简介: 【Leetcode -383.赎金信 -387.字符串中的第一个唯一字符】

Leetcode -383.赎金信

题目:给你两个字符串:ransomNote 和 magazine ,判断 ransomNote 能不能由 magazine 里面的字符构成。

如果可以,返回 true ;否则返回 false 。

magazine 中的每个字符只能在 ransomNote 中使用一次。

示例 1:

输入:ransomNote = “a”, magazine = “b”

输出:false

示例 2:

输入:ransomNote = “aa”, magazine = “ab”

输出:false

示例 3:

输入:ransomNote = “aa”, magazine = “aab”

输出:true

我们的思路是,创建两个数组并初始化为0,将两个字符串中的元素分别作为这两个数组的下标记录它们出现的次数,最后比较它们的出现次数的关系;下面看代码以及注释:

bool canConstruct(char* ransomNote, char* magazine)
    {
        //创建两个数组并初始化为0
        int hash[26] = { 0 };
        int tmp[26] = { 0 };
        //hash数组以ransomNote的元素减去'a'作为下标,每次相同的元素累加起来
        for (int i = 0; i < strlen(ransomNote); i++)
        {
            hash[ransomNote[i] - 'a'] += 1;
        }
        //tmp数组以magazine的元素减去'a'作为下标,每次相同的元素也累加起来
        for (int i = 0; i < strlen(magazine); i++)
        {
            tmp[magazine[i] - 'a'] += 1;
        }
        //最后比较这两个数组,在26个字母范围内,
        //如果是相同的字母,在hash数组中存放的个数大于tmp数组中的个数,就返回false
        //因为要使magazine这个字符串中的元素可以组成ransomNote这个字符串,
        //那么tmp数组中的以magazine字符串的元素作为下标的元素个数必须要大于hash数组中的
        for (int i = 0; i < 26; i++)
        {
            if (hash[i] > tmp[i])
            {
                return false;
            }
        }
        //如果前面没有返回,就返回true
        return true;
    }

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

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

示例 1:

输入 : s = “leetcode”

输出 : 0

示例 2 :

输入 : s = “loveleetcode”

输出 : 2

示例 3 :

输入 : s = “aabb”

输出 : -1

我们的思路是,创建一个数组并初始化为0,以s字符串中的元素s[ i ]作为这个数组的下标,记录每个元素出现的次数;然后检查数组以s[ i ]为下标第一次等于1的位置,返回 i 这个位置即可;

int firstUniqChar(char* s)
    {
        //创建一个hash数组并初始化为0
        int hash[26] = { 0 };
        //以s字符串中的元素s[i]作为hash数组的下标,记录s[i]出现的次数
        for (int i = 0; i < strlen(s); i++)
        {
            hash[s[i] - 'a'] += 1;
        }
        //检查数组以s[i]为下标第一次等于1的位置,返回i即可
        for (int i = 0; i < strlen(s); i++)
        {
            if (hash[s[i] - 'a'] == 1)
            {
                return i;
            }
        }
        //没有即返回-1
        return -1;
    }
目录
相关文章
|
2天前
|
存储 算法 安全
【刷题】 leetcode 面试题 01.06 字符串压缩
来看效果: 非常好!!!过啦!!!
25 5
【刷题】 leetcode 面试题 01.06 字符串压缩
|
2天前
leetcode代码记录(删除字符串中的所有相邻重复项
leetcode代码记录(删除字符串中的所有相邻重复项
11 0
|
2天前
|
算法
代码随想录算法训练营第五十五天 | LeetCode 583. 两个字符串的删除操作、72. 编辑距离、编辑距离总结
代码随想录算法训练营第五十五天 | LeetCode 583. 两个字符串的删除操作、72. 编辑距离、编辑距离总结
24 1
|
2天前
|
存储 编译器 Linux
标准库中的string类(中)+仅仅反转字母+字符串中的第一个唯一字符+字符串相加——“C++”“Leetcode每日一题”
标准库中的string类(中)+仅仅反转字母+字符串中的第一个唯一字符+字符串相加——“C++”“Leetcode每日一题”
|
2天前
|
机器学习/深度学习 索引
【力扣】387. 字符串中的第一个唯一字符
【力扣】387. 字符串中的第一个唯一字符
|
2天前
|
网络协议
《 LeetCode 热题 HOT 100》——无重复字符的最长子串
《 LeetCode 热题 HOT 100》——无重复字符的最长子串
|
2天前
|
存储
leetcode2744. 最大字符串配对数目
leetcode2744. 最大字符串配对数目
17 0
|
2天前
|
机器学习/深度学习 NoSQL Shell
力扣刷题-翻转字符串
力扣刷题-翻转字符串
12 1
|
2天前
|
算法 Java
[Java·算法·简单] LeetCode 28. 找出字符串中第一个匹配项的下标 详细解读
[Java·算法·简单] LeetCode 28. 找出字符串中第一个匹配项的下标 详细解读
26 0