跳至主要內容

2124. 检查是否所有 A 都在 B 之前


2124. 检查是否所有 A 都在 B 之前

🟢   🔖  字符串  🔗 力扣open in new window LeetCodeopen in new window

题目

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'

解题思路

  1. 遍历字符串:

    • 使用一个变量 indexB 来记录当前最后一个出现的字符 'b' 的位置。
    • 如果在记录了某个 'b' 的位置之后,仍然遇到字符 'a',说明不满足条件,立即返回 false
  2. 逻辑实现:

    • 遍历字符串时:
      • 如果当前字符是 '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使字符串平衡的最少删除次数 字符串 动态规划🟠🀄️open in new window 🔗open in new window
1752检查数组是否经排序和轮转得到[✓]数组🟢🀄️open in new window 🔗open in new window
2042检查句子中的数字是否递增[✓]字符串🟢🀄️open in new window 🔗open in new window