2629:Common permutation

keyword

C++

概要

2つの文字列が与えられる。順序を入れ替えることにより両方の部分文字列となるような文字列を出力する問題。
現れたアルファベットを数えて小さい方をとるだけ。10WA位とったけどそれは文字列が2つとも空とかの意地悪い入力のせい。

string str1, str2;

int main(){
    char a[1002], b[1002];
    int i, j, c1[26], c2[26];

    while(gets(a)){
        gets(b);
        str1 = string(a);
        str2 = string(b);
        //cout << "--- "<< str1 << endl;
        //cout << "*** "<< str2 << endl;
        REP(i,26) c1[i] = c2[i] = 0;

        for(i=0;i<SZ(str1);i++) if('a'<=str1[i] && str1[i]<='z')c1[str1[i]-'a']++;
        for(i=0;i<SZ(str2);i++) if('a'<=str2[i] && str2[i]<='z')c2[str2[i]-'a']++;

        REP(j,26)REP(i,min(c1[j],c2[j])) printf("%c",(char)(j+'a'));
        printf("\n");
    }

    return 0;
}