【Leetcode -455.分发饼干 -459.重复的字符串】

简介: 【Leetcode -455.分发饼干 -459.重复的字符串】

Leetcode -455.分发饼干

假设你是一位很棒的家长,想要给你的孩子们一些小饼干。但是,每个孩子最多只能给一块饼干。

对每个孩子 i,都有一个胃口值 g[i],这是能让孩子们满足胃口的饼干的最小尺寸;并且每块饼干 j,都有一个尺寸 s[j] 。如果 s[j] >= g[i],我们可以将这个饼干 j 分配给孩子 i ,这个孩子会得到满足。你的目标是尽可能满足越多数量的孩子,并输出这个最大数值。

示例 1 :

输入: g = [1, 2, 3], s = [1, 1]

输出 : 1

解释 :

你有三个孩子和两块小饼干,3个孩子的胃口值分别是:1, 2, 3。

虽然你有两块小饼干,由于他们的尺寸都是1,你只能让胃口值是1的孩子满足。

所以你应该输出1。

示例 2 :

输入: g = [1, 2], s = [1, 2, 3]

输出 : 2

解释 :

你有两个孩子和三块小饼干,2个孩子的胃口值分别是1, 2。

你拥有的饼干数量和尺寸都足以让所有孩子满足。

所以你应该输出2.

思路是先将两个数组从小到大排序,用两个指针 i 和 j 分别遍历两个数组;当s[j] 饼干的尺寸大于等于当前g[i]孩子的胃口时,i和j都往后走;否则,s[j] 小于g[i]时,j往后走,直到找到适合当前孩子的饼干尺寸;最终返回i;

int compare(void* p1, void* p2)
    {
        return *(int*)p1 - *(int*)p2;
    }
    int findContentChildren(int* g, int gSize, int* s, int sSize)
    {
        //给两个数组排序
        qsort(g, gSize, sizeof(g[0]), compare);
        qsort(s, sSize, sizeof(s[0]), compare);
        //i和j分别遍历孩子的胃口值和我有的饼干数量尺寸
        int i = 0, j = 0;
        //i和j都要小于数组长度
        while (i < gSize && j < sSize)
        {
            //当我的饼干尺寸小于孩子的胃口值,饼干的尺寸往后遍历,直到找到合适这个孩子的胃口的饼干
            //当我的饼干尺寸大于等于孩子的胃口值,i和j都往后遍历,判断下个孩子的胃口值
            //i统计的是当前胃口已经满的孩子,所以最终返回i即可
            if (s[j] >= g[i])
            {
                i++;
            }
            j++;
        }
        return i;
    }

Leetcode - 459.重复的字符串

题目:给定一个非空的字符串 s ,检查是否可以通过由它的一个子串重复多次构成。

示例 1:

输入: s = “abab”

输出 : true

解释 : 可由子串 “ab” 重复两次构成。

示例 2 :

输入 : s = “aba”

输出 : false

示例 3 :

输入 : s = “abcabcabcabc”

输出 : true

解释 : 可由子串 “abc” 重复四次构成。(或子串 “abcabc” 重复两次构成。)

思路是用两个指针 i 和 j ,i遍历一次,j会逐一判断i之前的元素是否相同,若不相同,则不是重复字符串,flag置0;若相同,则继续遍历,直到j遍历完;这一过程 i 就是在寻找开始重复字符串的开头,这样子 j 遍历 i 之前的元素就会每一个都相同,若不相同,则说明从 i 这个位置开始不能构成 s 的字串;

例如图,i 从下标为1开始,将 i 赋给 j ,判断 i 之前的元素是否可以构成 s 的字串,很明显从下标1开始不能构成;

i 从下标2开始,根据思路,i 之前的元素是可以构成 s 的字串的;

bool repeatedSubstringPattern(char* s)
    {
        //i找到开始重复字符串的开头,j开始遍历,逐一判断i之前的元素是否相同,
        //若不相同,则不是重复字符串,flag置0;若相同,则继续遍历,直到j遍历完,flag还没有置0,就返回true
        for (int i = 1; i <= strlen(s) / 2; i++)
        {
            //长度为奇数不可能有重复的字符串
            if (strlen(s) % i == 0)
            {
                //flag默认为1
                int flag = 1;
                for (int j = i; j < strlen(s); j++)
                {
                    if (s[j] != s[j - i])
                    {
                        flag = 0;
                        break;
                    }
                }
                if (flag)
                {
                    return true;
                }
            }
        }
        return false;
    }
目录
相关文章
|
5天前
|
Go C++
【力扣】2696. 删除子串后的字符串最小长度(模拟 栈 C++ Go实现栈)
【2月更文挑战第18天】2696. 删除子串后的字符串最小长度(模拟 栈 C++ Go实现栈)
36 6
|
5天前
|
存储
力扣面试经典题之数组/字符串
力扣面试经典题之数组/字符串
27 0
|
5天前
|
存储 算法 安全
【刷题】 leetcode 面试题 01.06 字符串压缩
来看效果: 非常好!!!过啦!!!
27 5
【刷题】 leetcode 面试题 01.06 字符串压缩
|
5天前
leetcode代码记录(删除字符串中的所有相邻重复项
leetcode代码记录(删除字符串中的所有相邻重复项
12 0
|
5天前
|
算法
leetcode代码记录(分发饼干
leetcode代码记录(分发饼干
12 0
|
5天前
|
算法
代码随想录算法训练营第五十五天 | LeetCode 583. 两个字符串的删除操作、72. 编辑距离、编辑距离总结
代码随想录算法训练营第五十五天 | LeetCode 583. 两个字符串的删除操作、72. 编辑距离、编辑距离总结
25 1
|
5天前
|
存储 编译器 Linux
标准库中的string类(中)+仅仅反转字母+字符串中的第一个唯一字符+字符串相加——“C++”“Leetcode每日一题”
标准库中的string类(中)+仅仅反转字母+字符串中的第一个唯一字符+字符串相加——“C++”“Leetcode每日一题”
|
5天前
|
机器学习/深度学习 索引
【力扣】387. 字符串中的第一个唯一字符
【力扣】387. 字符串中的第一个唯一字符
|
5天前
|
存储
leetcode2744. 最大字符串配对数目
leetcode2744. 最大字符串配对数目
17 0