力扣刷题记录——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


相关文章
|
5天前
|
算法 C++
【刷题】Leetcode 1609.奇偶树
这道题是我目前做过最难的题,虽然没有一遍做出来,但是参考大佬的代码,慢慢啃的感觉的真的很好。刷题继续!!!!!!
8 0
|
5天前
|
算法 索引
【刷题】滑动窗口精通 — Leetcode 30. 串联所有单词的子串 | Leetcode 76. 最小覆盖子串
经过这两道题目的书写,相信大家一定深刻认识到了滑动窗口的使用方法!!! 下面请大家继续刷题吧!!!
10 0
|
6天前
|
算法
【刷题】 leetcode 面试题 08.05.递归乘法
递归算法是一种在计算机科学和数学中广泛应用的解决问题的方法,其基本思想是利用问题的自我相似性,即将一个大问题分解为一个或多个相同或相似的小问题来解决。递归算法的核心在于函数(或过程)能够直接或间接地调用自身来求解问题的不同部分,直到达到基本情况(也称为基础案例或终止条件),这时可以直接得出答案而不必再进行递归调用。
25 4
【刷题】 leetcode 面试题 08.05.递归乘法
|
6天前
|
存储 算法 安全
【刷题】 leetcode 面试题 01.06 字符串压缩
来看效果: 非常好!!!过啦!!!
25 5
【刷题】 leetcode 面试题 01.06 字符串压缩
|
6天前
|
存储 算法 测试技术
|
6天前
|
算法 C语言 C++
|
存储 算法 C语言
C语言刷题~Leetcode与牛客网简单题
C语言刷题~Leetcode与牛客网简单题
|
22天前
刷题之Leetcode160题(超级详细)
刷题之Leetcode160题(超级详细)
13 0
|
22天前
|
Java
刷题之Leetcode19题(超级详细)
刷题之Leetcode19题(超级详细)
14 0