Vấn đề
Chúng ta cần viết một hàm JavaScript nhận vào một chuỗi chữ cái tiếng Anh viết thường str làm đối số thứ nhất và một ký tự đơn char tồn tại trong chuỗi str làm đối số thứ hai. Hàm phải chuẩn bị và trả về một mảng, trong đó với mỗi ký tự trong chuỗi str, chứa khoảng cách từ ký tự đó đến ký tự gần nhất được chỉ định bởi char.
Ví dụ, nếu đầu vào là:
Đầu vào
const str = 'somestring'; const char = 's';
Đầu ra
const output = [0, 1, 2, 1, 0, 1, 2, 3, 4, 5];
Ví dụ
Dưới đây là mã thực hiện:
const str = 'somestring';
const char = 's';
const shortestDistance = (str = '', char = '') => {
const res = new Array(str.length).fill(Infinity);
let prev = Infinity;
const handleIndex = (i) => {
if (str[i] === char) {
prev = i;
}
res[i] = Math.min(res[i], Math.abs(i - prev));
};
for (let i = 0; i < str.length; i++) {
handleIndex(i);
}
prev = Infinity;
for (let i = str.length - 1; i >= 0; i--) {
handleIndex(i);
}
return res;
};
console.log(shortestDistance(str, char));
Kết quả
[0, 1, 2, 1, 0, 1, 2, 3, 4, 5]