Problem : A | B | C | D | E | F | G | H

A - Kamus Panda

Gunakan array boolean 1 dimensi dengan 26 elemen ('a'..'z'), masing-masing untuk menandakan apakah karakter tersebut muncul dalam string yang diberikan. Lakukan iterasi/loop untuk semua karakter pada string input dan tandai karakter tersebut sebagai true pada array boolean kita. Lakukan iterasi lagi pada array boolean dan hitung ada berapa banyak elemen yang bernilai true.

Alternatif lainnya, kita bisa terlebih dahulu mengurutkan semua karakter pada string input mulai dari 'a' hingga 'z'. Kemudian lakukan iterasi pada string input (yang sudah diurutkan tadi) dan hitung ada berapa banyak pasangan karakter bersebelahan yang nilainya berbeda, tambahkan dengan 1.


Statistik Problem A
YES = 21
NO - Wrong Answer = 20
NO - Time Limit Exceeded = 5
NO - Run-time Error = 5
NO - Compile Error = 2


Solusi C/C++   (oleh Suhendry Effendy)
#include <cstdio>
#include <string>
using namespace std;

int main()
{
  int T;
  scanf( "%d", &T );
  
  while ( T-- ) {
    char line[205];
    bool used[26] = {false};
    int  ans = 0;

    scanf( "%s", line );

    int n = strlen(line);
    for ( int i = 0; i <  n; i++ ) used[line[i]-'a'] = true;
    for ( int i = 0; i < 26; i++ ) ans += used[i];

    printf( "%d\n", ans );
  }

  return 0;
}
Solusi Pascal   (oleh Eko Wibowo)
var
  T, i , ans : integer;
  line       : string;
  c          : char;
  used       : array['a'..'z'] of boolean;
begin
  readln(T);
  while (T > 0) do
  begin
    T   := T - 1;
    ans := 0;
    readln(line);
    for c := 'a' to 'z' do used[c] := false;
    for i := 1 to length(line) do used[line[i]] := true;
    for c := 'a' to 'z' do
      if used[c] then ans := ans + 1;
    writeln(ans);
  end;
end.