222222/Algorithm-Practice
/Python/Python/LeetCode/1462. 你的密码有效吗.md
# 1462. 你的密码有效吗
题目描述
给你一个字符串 `password`,该字符串由小写字母组成。
密码有效 的定义是:密码需要包含至少 5 个不连续的字符,并且不能包含两个连续的相同字符。
例如,`"aabbcc"` 是一个有效的密码,因为:
- 它包含至少5个不连续的字符(例如,`abc`、`bca`、`cab` 或 `ab`、`bc`、`ca`)。
- 它不包含两个连续相同的字符。
`"aaabaaa"` 不是一个有效的密码,因为它不包含至少5个不连续的字符,而且它包含两个连续相同字符(`aa`)。
`"caccacaca"` 不是一个有效的密码,因为它包含两个连续相同字符(`aa`)。
如果密码有效,请返回 `true`,否则返回 `false`。
示例
输入:password = "aabbcc"
输出:true
解释:
- 这个密码包含至少5个不连续的字符(例如,`abc`、`bca`、`cab` 或 `ab`、`bc`、`ca`)。
- 它不包含两个连续相同的字符。
输入:password = "aaabaaa"
输出:false
解释:
- 这个密码不包含至少5个不连续的���符。
- 它包含两个连续相同字符(`aa`)。
输入:password = "cacacaca"
输出:false
解释:
- 这个密码包含两个连续相同字符(`aa`)。
提示
1. `1 <= password.length <= 100`
2. `password` 仅包含小写字母(`'a'` 到 `'z'`)。
思路
要判断一个密码是否有效,我们需要检查以下几点:
1. 确保密码包含至少5个不连续的字符。
2. 确保密码中没有两个连续的相同字符。
我们可以使用滑动窗口技术来实现这个检查。具体步骤如下:
1. 初始化一个滑动窗口的左边界 `left` 和一个计数器 `count` 来记录当前窗口内连续相同字符的数量。
2. 遍历字符串 `password`,对于每个字符:
- 如果当前字符与窗口内的最后一个字符相同,则增加计数器 `count`。
- 如果当前字符与窗口内的最后一个字符不同,则重置计数器 `count`。
- 检查当前窗口内的连续相同字符是否超过2个,如果是,则返回 `False`。
3. 检查当前窗口内的字符是否已经超过了5个,如果是,则返回 `True`。
Python 代码
```python class Solution: def strongPasswordCheckerII(self, password: str) -> bool: left = 0 count = 0 length = len(password) for right in range(length): if right > 0 and password[right] == password[right - 1]: count = 0 else: count += 1 if count > 2: return False if length < 6: return False for i in range(1, length - 5 + 1): if password[i] == password[i - 1] or password[i] == password[i + 1]: return False return True ```复杂度分析
- 时间复杂度:O(n),其中 n 是字符串的长度。我们需要遍历字符串两次。
- 空间复杂度:O(1),我们只使用了常数级的额外空间。
/Python/Python/LeetCode/1621. 检查是否所有字母都至少出现一次.md
# 1621. 检查是否所有字母都至少出现一次
题目描述
给定一个字符串 `s`,返回一个布尔值,表示是否所有字母都至少出现了一次。
示例
输入:s = "abccba" 输出:true 解释:- 字符 `a` 出现了 1 次。
- 字符 `b` 出现了 2 次。
- 字符 `c` 出现了 1 次。
输入:s = "aazz"
输出:false
解释:
- 字符 `a` 出现了 2 次。
- 字符 `z` 出现了 1 次。
提示
- `1 <= s.length <= 50`
- `s` 仅由小写字母组成。
思路
要检查一个字符串中是否所有字母都至少出现了一次,可以使用集合来辅助判断。具体步骤如下: 1. 将字符串中的字符转换为一个集合,这样可以去除重复字符,并且检查集合的长度是否等于字符串的长度。如果集合长度等于字符串长度,则说明所有字符都至少出现了一次。 2. 如果字符串长度小于等于50,则直接使用集合进行判断。Python 代码
```python class Solution: def canBePressed(self, target: str) -> bool: if len(target) <= 50: return len(set(target)) == len(target) else: return False ```复杂度分析
- 时间复杂度:O(n),其中 n 是