如何利用桶排标记字符

H. 分心的岩宝
解法

由题意得,岩宝做的同一任务不能分开做,即之前做过的任务不能在后面出现,所以只需要判断是否重复出现做同一任务的情况即可

当我们遇到一串连续的字母时,continue,直到有ch[i]!=ch[i+1]的情况,用桶排标记这个字母,然后去判断这个字母在后面是否出现,for枚举一次,即可输出最后的结果。
标程


#include <iostream>
#include <algorithm>
#include <cstring>
#include <cstdio>
using namespace std;
char ch[60];
int f[27];
int main() {
    int T;
    cin >> T;
    while (T--) {
        int n;
        cin >> n;
        cin >> ch;
        int flag = 1;
        memset(f, 0, sizeof(f));
        for (int i = 0; i < n; i++) {
            if (ch[i] == ch[i + 1])
                continue;
            else {
                if (f[ch[i] - 'A'] == 1) {
                    flag = 0;
                    break;
                } else
                    f[ch[i] - 'A'] = 1;
            }
        }
        if (flag)
            puts("Yes");
        else
            puts("No");
    }

请问这里面的f(ch[i]-'A']=1是什么意思

f 是个整型数组, ch 是个字节数组,'A' 是一个字节

ch[i] - 'A' 即两个字节相减,得出的数字作为下标,获取 f 数组中对应的项,然后给该项赋值为1

ch[i]是字符
ch[i]-‘A’,其实就是将每个字符对齐到 0上