2124. 检查是否所有 A 都在 B 之前
2124. 检查是否所有 A 都在 B 之前
题目
Given a string s
consisting of only the characters 'a'
and 'b'
, return true
if every 'a'
appears before every 'b'
in the string. Otherwise, return false
.
Example 1:
Input: s = "aaabbb"
Output: true
Explanation:
The 'a's are at indices 0, 1, and 2, while the 'b's are at indices 3, 4, and 5.
Hence, every 'a' appears before every 'b' and we return true.
Example 2:
Input: s = "abab"
Output: false
Explanation:
There is an 'a' at index 2 and a 'b' at index 1.
Hence, not every 'a' appears before every 'b' and we return false.
Example 3:
Input: s = "bbb"
Output: true
Explanation:
There are no 'a's, hence, every 'a' appears before every 'b' and we return true.
Constraints:
1 <= s.length <= 100
s[i]
is either'a'
or'b'
.
题目大意
给你一个 仅 由字符 'a'
和 'b'
组成的字符串 s
。如果字符串中 每个 'a'
都出现在每个'b'
之前,返回 true
;否则,返回 false
。
示例 1:
输入: s = "aaabbb"
输出: true
解释:
'a' 位于下标 0、1 和 2 ;而 'b' 位于下标 3、4 和 5 。
因此,每个 'a' 都出现在每个 'b' 之前,所以返回 true 。
示例 2:
输入: s = "abab"
输出: false
解释:
存在一个 'a' 位于下标 2 ,而一个 'b' 位于下标 1 。
因此,不能满足每个 'a' 都出现在每个 'b' 之前,所以返回 false 。
示例 3:
输入: s = "bbb"
输出: true
解释:
不存在 'a' ,因此可以视作每个 'a' 都出现在每个 'b' 之前,所以返回 true 。
提示:
1 <= s.length <= 100
s[i]
为'a'
或'b'
解题思路
遍历字符串:
- 使用一个变量
indexB
来记录当前最后一个出现的字符'b'
的位置。 - 如果在记录了某个
'b'
的位置之后,仍然遇到字符'a'
,说明不满足条件,立即返回false
。
- 使用一个变量
逻辑实现:
- 遍历字符串时:
- 如果当前字符是
'b'
,更新indexB
为当前索引。 - 如果当前字符是
'a'
且其索引大于indexB
,返回false
。
- 如果当前字符是
- 遍历完成后,如果没有发现违反条件的情况,则返回
true
。
- 遍历字符串时:
复杂度分析
- 时间复杂度:
O(n)
,其中n
是字符串的长度,单次遍历字符串。 - 空间复杂度:
O(1)
,使用了常量空间变量indexB
。
代码
/**
* @param {string} s
* @return {boolean}
*/
var checkString = function (s) {
let indexB = s.length; // 初始化为字符串长度(默认没有 'b')
for (let i = 0; i < s.length; i++) {
if (s[i] === 'b') {
indexB = i; // 记录当前 'b' 的位置
}
if (i > indexB && s[i] === 'a') {
return false; // 如果在 'b' 之后发现 'a',返回 false
}
}
return true; // 完成遍历,返回 true
};
相关题目
题号 | 标题 | 题解 | 标签 | 难度 | 力扣 |
---|---|---|---|---|---|
1653 | 使字符串平衡的最少删除次数 | 栈 字符串 动态规划 | 🟠 | 🀄️ 🔗 | |
1752 | 检查数组是否经排序和轮转得到 | [✓] | 数组 | 🟢 | 🀄️ 🔗 |
2042 | 检查句子中的数字是否递增 | [✓] | 字符串 | 🟢 | 🀄️ 🔗 |