力扣刷题记录——367. 有效的完全平方数、383. 赎金信、387. 字符串中的第一个唯一字符、389. 找不同

简介: 力扣刷题记录——367. 有效的完全平方数、383. 赎金信、387. 字符串中的第一个唯一字符、389. 找不同

367. 有效的完全平方数

题目描述

给你一个正整数 num 。如果 num 是一个完全平方数,则返回 true ,否则返回 false 完全平方数 是一个可以写成某个整数的平方的整数。换句话说,它可以写成某个整数和自身的乘积。 不能使用任何内置的库函数,如 sqrt 示例 1: 输入:num = 16 输出:true 解释:返回 true ,因为 4 * 4 = 16 且 4 是一个整数。 示例 2: 输入:num = 14 输出:false 解释:返回 false ,因为 3.742 * 3.742 = 14 但 3.742 不是一个整数。

解题思路

依然是暴力循环,注意range的取值范围,因为是平方,所有只要到16就可以了,如果选择更大的数不仅没有意义,而且会超出时间限制。

解题代码

1. def isPerfectSquare(num):
2. for i in range(1,2**16):
3. if i**2 == num:
4. return True
5. return False

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

解题思路

首先用集合判断,是不是ransomNote中的元素在magazine都出现了,也就是集合相交还等于randomnote的集合。然后就是判断,每个元素在ransomnote中出现的次数是不是都小于magazine中出现的次数,如果不是返回False。两个检测都通过的话,返回True。

解题代码

1. def canConstruct(ransomNote:str,magazine:str):
2. if set(ransomNote)&set(magazine) != set(ransomNote):
3. return False
4. else:
5. for i in set(ransomNote):
6. if ransomNote.count(i) > magazine.count(i):
7. return False
8. return True

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

题目描述

给定一个字符串 s ,找到 它的第一个不重复的字符,并返回它的索引 。如果不存在,则返回 -1 示例 1: 输入: s = "leetcode" 输出: 0 示例 2: 输入: s = "loveleetcode" 输出: 2 示例 3: 输入: s = "aabb" 输出: -1

解题思路

这个还是比较简单的,直接暴力循环,在s中数每一个i,如果等于1的话就返回索引,如果遍历完都不是1的话返回-1。

解题代码

1. def firstUniqChar(s: str):
2. for i in s:
3. if s.count(i) == 1:
4. return s.index(i)
5. else:
6. return -1

389. 找不同

题目描述

给定两个字符串 s t ,它们只包含小写字母。 字符串 t 由字符串 s 随机重排,然后在随机位置添加一个字母。 请找出在 t 中被添加的字母。 示例 1: 输入:s = "abcd", t = "abcde" 输出:"e" 解释:'e' 是那个被添加的字母。 示例 2: 输入:s = "", t = "y" 输出:"y"

解题思路

用集合的补集,直接作差就可以得出后来增加的元素。

解题过程

1. def findTheDifference(self, s: str, t: str) -> str:
2. if s== "":
3. return t
4. else:
5. return str(set(t) - set(s))[2]

忽略了如果添加的元素本身就在原来的字符串中出现的这种情况,所以还是用暴力循环来写,遍历t,如果t中的i出现次数比s中多一次,那么这个i就是后来添加的元素。

1. def findTheDifference(s: str, t: str):
2. if s == "":
3. return t
4. else:
5. for i in t:
6. if t.count(i) - s.count(i) == 1:
7. return i


相关文章
|
13天前
|
搜索推荐 索引 Python
【Leetcode刷题Python】牛客. 数组中未出现的最小正整数
本文介绍了牛客网题目"数组中未出现的最小正整数"的解法,提供了一种满足O(n)时间复杂度和O(1)空间复杂度要求的原地排序算法,并给出了Python实现代码。
43 2
|
4天前
|
存储 算法
LeetCode第43题字符串相乘
LeetCode第43题"字符串相乘"的解题方法,通过使用数组存储乘积并处理进位,避免了字符串转换数字的复杂性,提高了算法效率。
LeetCode第43题字符串相乘
|
4天前
|
算法 Java
LeetCode第28题找出字符串中第一个匹配项的下标
这篇文章介绍了LeetCode第28题"找出字符串中第一个匹配项的下标"的两种解法:暴力解法和KMP算法,并解释了KMP算法通过构建前缀表来提高字符串搜索的效率。
LeetCode第28题找出字符串中第一个匹配项的下标
|
4天前
|
算法
LeetCode第8题字符串转换整数 (atoi)
该文章介绍了 LeetCode 第 8 题字符串转换整数 (atoi)的解法,需要对字符串进行格式解析与校验,去除前导空格和处理正负号,通过从高位到低位的计算方式将字符串转换为整数,并处理越界情况。同时总结了这几道题都需要对数字的表示有理解。
LeetCode第8题字符串转换整数 (atoi)
|
4天前
|
算法
LeetCode第3题无重复字符的最长子串
该文章介绍了 LeetCode 第 3 题无重复字符的最长子串的解法,通过使用 HashSet 记录不重复的子元素,以每个字符开头遍历字符串,遇到重复字符则重新计算,最终找到最长子串,同时提到可以考虑使用 HashMap 降低复杂度。
LeetCode第3题无重复字符的最长子串
|
13天前
|
Python
【Leetcode刷题Python】50. Pow(x, n)
本文介绍了LeetCode第50题"Pow(x, n)"的解法,题目要求实现计算x的n次幂的函数,文章提供了递归分治法的详细解析和Python实现代码。
11 1
|
13天前
|
Python
【Leetcode刷题Python】LeetCode 478. 在圆内随机生成点
本文介绍了LeetCode 478题的解法,题目要求在给定圆的半径和圆心位置的情况下实现在圆内均匀随机生成点的功能,并提供了Python的实现代码。
12 1
|
13天前
|
算法 Python
【Leetcode刷题Python】73. 矩阵置零
本文介绍了LeetCode第73题的解法,题目要求在给定矩阵中将所有值为0的元素所在的行和列全部置为0,并提供了一种原地算法的Python实现。
13 0
【Leetcode刷题Python】73. 矩阵置零
|
13天前
|
Python
【Leetcode刷题Python】1467. 两个盒子中球的颜色数相同的概率
本文介绍了LeetCode第50题"Pow(x, n)"的解法,题目要求实现计算x的n次幂的函数,文章提供了递归分治法的详细解析和Python实现代码。
13 0
|
13天前
|
Python
【Leetcode刷题Python】剑指 Offer 32 - III. 从上到下打印二叉树 III
本文介绍了两种Python实现方法,用于按照之字形顺序打印二叉树的层次遍历结果,实现了在奇数层正序、偶数层反序打印节点的功能。
28 6