酷代码 AI
菜单
服务商

给定一个由字符 o 和 x 组成的长度为 N 的字符串 S。 请计算满足以下所有条件的整数对 (l, r) 的数量: 1≤l≤r≤N; 在字符串 S 的子串 S[l, r](从第 l 个字符到第 r 个字符)中,同时包含 o 和 x 两种字符。 输入 第一行,一个整数 N; 第二行,一个字符串 S。 输出 输出满足条件的整数对的数量。 数据范围 1≤N≤10^6,S 仅由字符 o 和 x 组成。 输入样例1 4 oxxo 输出样例1 5 输入样例2 7 xoxooxx 输出样例2 19

以下是使用 Python 解决此问题的代码: ```python n = int(input()) s = input() count = 0 # 遍历所有可能的子串起始位置 l for l in range(n): has_o = False has_x = False # 遍历以 l 为起始位置的所有可能的子串结束位置 r for r in range(l, n): if s[r] == 'o': has_o = True if s[r] == 'x': has_x = True if has_o and has_x: count = count + 1 print(count) ``` 代码解释 1. 输入读取: - 首先读取整数 `n`,它代表字符串的长度。 - 接着读取字符串 `s`,该字符串仅由字符 `o` 和 `x` 组成。 2. 双重循环遍历所有子串: - 外层循环控制子串的起始位置 `l`,范围是从 `0` 到 `n - 1`。 - 对于每个起始位置 `l`,内层循环控制子串的结束位置 `r`,范围是从 `l` 到 `n - 1`。 - 对于每个子串 `S[l:r + 1]`,使用两个布尔变量 `has_o` 和 `has_x` 来标记子串中是否包含字符 `o` 和 `x`。 - 当遍历到字符 `o` 时,将 `has_o` 设为 `True`;当遍历到字符 `x` 时,将 `has_x` 设为 `True`。 - 一旦 `has_o` 和 `has_x` 都为 `True`,说明当前子串同时包含 `o` 和 `x`,将满足条件的整数对数量 `count` 加 1。 3. 输出结果: - 最后输出满足条件的整数对 `(l, r)` 的数量 `count`。 复杂度分析 - 时间复杂度:$O(n^2)$,因为使用了双重循环来遍历所有可能的子串。 - 空间复杂度:$O(1)$,只使用了常数级的额外空间。 [2025-12-11 12:17:02 | AI问答 | 517点数解答]

相关提问
发财导航,免费问AI
实用工具查看更多