Viết hàm nhận chuỗi, số n và ký tự c. Thay thế lần xuất hiện thứ n của mỗi ký tự bằng c.
Ví dụ
Chuỗi: 'This is a sample string', n = 2, c = '*'
Lần xuất hiện thứ 2 của mỗi ký tự sẽ được thay bằng *.
Giải pháp
Mã triển khai (theo dõi tần suất từng ký tự):
const str = 'This is a sample string';
const num = 2;
const char = '*';
const replaceNthAppearance = (str, num, char) => {
return str.split('').reduce((acc, val, ind, arr) => {
let { res, map } = acc;
if (!map.has(val)) {
map.set(val, 1);
res += (num === 1 ? char : val); // Nếu n=1 thì thay lần đầu
} else {
const freq = map.get(val);
res += (freq + 1 === num ? char : val);
map.set(val, freq + 1);
}
return { res, map };
}, { res: '', map: new Map() }).res;
};
console.log(replaceNthAppearance(str, num, char));
Kết quả
Đầu ra trong console:
This ***a s*mple string
Giải thích: Mỗi ký tự được đếm riêng. Lần xuất hiện thứ 2 của 'i', 's', ' ', 'a', 'p', 'l', 'e', 't', 'r', 'n', 'g' bị thay bằng '*'.