CCA的词典

题目链接:nowcoder 217040

到主站看:https://blog.csdn.net/weixin_43346722/article/details/115218582

题目大意

有一些长度不超过 2 的单词在字典中。
然后每次给出一个单词,问你多少个字典中的单词可以通过交换相邻字母(或者不交换)得到这个单词。

思路

因为长度不超过二,我们考虑直接统计。

可以搞一个数组 ,记录 这个单词作为询问的答案。(如果这个单词只有一个字母,那 就是
然后我们考虑没读入一个字典中的数,就把它和它的翻转形对应的 加一。
有特殊的情况不用给翻转形加,就是翻转之后跟原来一样,那就是只有一个字符或者两个字符一样。

其实如果大一点可以用哈希来做。

代码

#include<cstdio>
#include<cstring>

using namespace std;

int n, ans[31][31];
char c[5], cn;

int main() {
    scanf("%d", &n);
    for (int i = 1; i <= n; i++) {
        scanf("%s", &c);
        cn = strlen(c);
        if (cn == 1) ans[c[0] - 'a' + 1][0]++;
            else {
                ans[c[0] - 'a' + 1][c[1] - 'a' + 1]++;
                if (c[0] != c[1]) ans[c[1] - 'a' + 1][c[0] - 'a' + 1]++;
                //如果单词两个字母一样,那翻不翻转都是那样,就不用再加
            }
    }

    scanf("%d", &n);
    for (int i = 1; i <= n; i++) {
        scanf("%s", &c);
        cn = strlen(c);
        if (cn == 1) printf("%d\n", ans[c[0] - 'a' + 1][0]);
            else printf("%d\n", ans[c[0] - 'a' + 1][c[1] - 'a' + 1]);
    }

    return 0;
}