Day 0x17 UVa10252 Common Permutation

题意

  • 输入 ab 两字串,输出皆为两者的子字串
  • 需要注意的有:
    1. 重复输入两字串 (各一行)
    2. 字串皆小写字母
    3. 输出的字串要同时为两字串的子字串 (可顺序不同)
    4. 承上点,有多组符合输出字母由小到大

解法

  • 换句话说,确定两字串的字母各有多少个,由小到大输出即可,和 Day 0x5 UVa10062 Tell me the frequencies! & Day 0x6 UVa10008 What's Cryptanalysis? 这两题小类似
  • 重复读入两字串直到 EOF,并用两次回圈分别计算两字串各字母的出现次数
    char a[1001] = {0};
    char b[1001] = {0};
    int i, j;
    
    while(gets(a) && gets(b)){
    
        int tableA[26] = {0};
        int tableB[26] = {0};
    
        for(i = 0; i < strlen(a); i++){
            tableA[a[i] - 'a']++;
        }
        for(i = 0; i < strlen(b); i++){
            tableB[b[i] - 'a']++;
        }
        ...
    }
    
  • for 回圈由小到大遍历字母表,透过 if 比较两字串该字母出现的次数谁比较少,再用 for 输出较少刺数的字母
    for(i = 0; i < 26; i++){
        if(tableA[i] != 0 && tableB[i] != 0){
            if(tableA[i] <= tableB[i]){
                min = tableA[i];
            }
            else{
                min = tableB[i];
            }
            for(j = 0; j < min; j++){
                printf("%c", i + 97);
            }
        }
    }
    
  • C code
    #include<stdio.h>
    #include<string.h>
    
    int main(){
    
        char a[1001] = {0};
        char b[1001] = {0};
        int i, j;
        int length;
        int min;
    
        while(gets(a) && gets(b)){
    
            int tableA[26] = {0};
            int tableB[26] = {0};
    
            for(i = 0; i < strlen(a); i++){
                tableA[a[i] - 'a']++;
            }
            for(i = 0; i < strlen(b); i++){
                tableB[b[i] - 'a']++;
            }
    
            for(i = 0; i < 26; i++){
                if(tableA[i] && tableB[i]){
                    if(tableA[i] <= tableB[i]){
                        min = tableA[i];
                    }
                    else{
                        min = tableB[i];
                    }
                    for(j = 0; j < min; j++){
                        printf("%c", i + 97);
                    }
                }
            }
    
            printf("\n");
    
        }
    
        return 0;
    }
    

<<:  【从零开始的Swift开发心路历程-Day12】打造自己的私房美食名单Part1

>>:  弹性时间就是最好的知识管理

[面试][资料库]关联式资料库要如何设计避免超卖?

库存只剩 1 件,但却有 10 个人买到? 网路商城特卖会常常会推出特定商品限量 1 组的抢购活动...

Day 0x10 UVa10057 A mid-summer nights dream

Virtual Judge ZeroJudge 题意 输入 n 个数字,输出能使 (|X1 − A...

DAY22 这边先帮你上一个按钮喔~(四)

「欸!?阿按了这个按钮怎麽没反应阿?」 这是我妈最常问我的问题,大部分情况都是她遥控器忘记装电池。 ...

Day01 从零开始学React

前言 因为是第一次挑战铁人赛,参赛组别是自我挑战组,所以不想给自己太大压力,期许只要能完成30天不断...

Day26-保护鲸鱼人人有责(一)

前言 自从进入大容器时代後,Docker、K8s 已经逐渐成为开发、测试及部署时不可或缺的工具,但也...