第85回【JavaScript】英小文字の出現率、文字列の出現率
現在取り組んでいるのは、paiza ラーニング問題集「データセット選択メニュー」になります。
はじめに
猫とキャンプと野球観戦と AWS が大好きな旦那、LeoSaki です。モフモフしたい。
JavaScript をゼロから勉強してみよう、のコーナー 85 回目です。
AWS で新しいことをしてみよう、と思ったとき、すぐに実行に移ることが出来るのがいいところだと思います。しかし、お金がかかることになると、やりたいことを説明して稟議を作成して、となかなかスタートラインに立つことが出来ません。
それでは、今日も頑張ってみようと思います。
英小文字の出現率 (paizaランク C 相当)
長さ N の文字列 S が与えられます。S に含まれている各文字の出現回数をそれぞれ求め、「a」の出現回数、「b」の出現回数、…、「z」の出現回数をこの順に半角スペース区切りで1行に出力してください。
入力される値
N
S
入力値最終行の末尾に改行が1つ入ります。
期待する出力
「a」の出現回数 count_a
、「b」の出現回数 count_b
、…、「z」の出現回数 count_z
をこの順に半角スペース区切りで1行に出力してください。
count_a count_b ... count_z
また、末尾に改行を入れ、余計な文字、空行を含んではいけません。
すべてのテストケースにおいて、以下の条件をみたします。
・ 1 ≦ N ≦ 100
・ S は英小文字「a」,「b」, … ,「z」からなる長さ N の文字列
入力例
13
aaabbbccdddde
出力例
3 3 2 4 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
こうなると、連想配列を利用するのが早そうだ。
JavaScript
process.stdin.resume();
process.stdin.setEncoding('utf8');
var lines = [];
var reader = require('readline').createInterface({
input: process.stdin,
output: process.stdout
});
reader.on('line', (line) => {
lines.push(line);
});
reader.on('close', () => {
const n = Number(lines[0]);
const s = lines[1];
const dic = {};
for (let i = 'a'.charCodeAt(0); i <= 'z'.charCodeAt(0); i++) {
dic[String.fromCharCode(i)] = 0;
}
for (let val of s) {
dic[val]++;
}
console.log(Object.values(dic).join(' '));
});
Python
N = int(input())
S = input()
dic = { chr(x):0 for x in range(ord('a'),ord('z')+1) }
for s in S:
dic[s] += 1
print(' '.join(map(str,dic.values())))
文字列の出現率 (paizaランク C 相当)
文字列が N 個与えられます。各文字列の出現回数を文字列の辞書順に出力してください。
入力される値
N
S_1
S_2
...
S_N
入力値最終行の末尾に改行が1つ入ります。
期待する出力
文字列 S とその出現回数 A を、文字列 S の辞書順に、改行区切りで出力してください。
S A
...
また、末尾に改行を入れ、余計な文字、空行を含んではいけません。
すべてのテストケースにおいて、以下の条件をみたします。
・ 1 ≦ N ≦ 100
・ S_i は英小文字「a」,「b」, … ,「z」からなる1文字以上3文字以下の文字列 (1 ≦ i ≦ N)
入力例
5
bcd
abc
bcd
bcd
bcd
出力例
abc 1
bcd 4
存在確認して、並べ替えして、なかなか手間がかかりそう。
JavaScript
process.stdin.resume();
process.stdin.setEncoding('utf8');
var lines = [];
var reader = require('readline').createInterface({
input: process.stdin,
output: process.stdout
});
reader.on('line', (line) => {
lines.push(line);
});
reader.on('close', () => {
const n = Number(lines[0]);
const dic = {};
for (let i = 1; i <= n; i++) {
const key = lines[i];
if (key in dic) {
dic[key]++;
} else {
dic[key] = 1;
}
}
const keys = Object.keys(dic);
keys.sort();
for (let val of keys) {
console.log(val,dic[val]);
}
});
Python
N = int(input())
dic = {}
for _ in range(N):
S = input()
if S in dic:
dic[S] += 1
else:
dic[S] = 1
for k,v in sorted(dic.items()):
print(k,v)
最後に
キーで並べ替えを実行する方法がよくわからず。キーだけの配列を作り、並べ替えをして、その配列から順番にキーを取り出して・・・、これでいいんだろうか。
連想配列は絶対に多用することになるものだと思うので、いろいろな使い方のパターンを覚えるしかないかなぁと思っています。頑張って学習続けます。
引き続き、よろしくお願いいたします!
ディスカッション
コメント一覧
まだ、コメントがありません