【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第三题(无重复字符的最长子串)
这篇文章介绍了解决LeetCode第三题“无重复字符的最长子串”的算法,使用滑动窗口技术来找出给定字符串中最长的不含重复字符的子串,并提供了详细的代码实现和解释。
99 0
Leetcode第三题(无重复字符的最长子串)
|
2月前
|
JavaScript
力扣3333.找到初始输入字符串Ⅱ
【10月更文挑战第9天】力扣3333.找到初始输入字符串Ⅱ
37 1
|
2月前
|
C++
Leetcode第43题(字符串相乘)
本篇介绍了一种用C++实现的字符串表示的非负整数相乘的方法,通过逆向编号字符串,将乘法运算转化为二维数组的累加过程,最后处理进位并转换为字符串结果,解决了两个大数相乘的问题。
25 9
|
2月前
|
算法 C++
Leetcode第八题(字符串转换整数(atoi))
这篇文章介绍了LeetCode上第8题“字符串转换整数(atoi)”的解题思路和C++的实现方法,包括处理前导空格、正负号、连续数字字符以及整数溢出的情况。
20 0
|
2月前
【LeetCode 22】459.重复的子字符串
【LeetCode 22】459.重复的子字符串
31 0
|
2月前
【LeetCode 20】151.反转字符串里的单词
【LeetCode 20】151.反转字符串里的单词
21 0
|
2月前
【LeetCode 19】541.反转字符串II
【LeetCode 19】541.反转字符串II
22 0
|
2月前
【LeetCode 18】6.2.反转字符串
【LeetCode 18】6.2.反转字符串
17 0
|
3月前
|
Unix Shell Linux
LeetCode刷题 Shell编程四则 | 194. 转置文件 192. 统计词频 193. 有效电话号码 195. 第十行
本文提供了几个Linux shell脚本编程问题的解决方案,包括转置文件内容、统计词频、验证有效电话号码和提取文件的第十行,每个问题都给出了至少一种实现方法。
LeetCode刷题 Shell编程四则 | 194. 转置文件 192. 统计词频 193. 有效电话号码 195. 第十行
|
4月前
|
搜索推荐 索引 Python
【Leetcode刷题Python】牛客. 数组中未出现的最小正整数
本文介绍了牛客网题目"数组中未出现的最小正整数"的解法,提供了一种满足O(n)时间复杂度和O(1)空间复杂度要求的原地排序算法,并给出了Python实现代码。
125 2