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 是