Чтобы решить проблему «взвешенных однородных строк» на HackerRank с помощью JavaScript, вы можете использовать различные подходы. Задача состоит в том, чтобы определить, является ли строка «однородной», на основе веса, присвоенного каждому символу в строке. Вот несколько способов решения этой проблемы, а также примеры кода:
Метод 1: метод грубой силы
function weightedUniformStrings(s, queries) {
const weights = new Set();
let currentWeight = 0;
for (let i = 0; i < s.length; i++) {
currentWeight = s.charCodeAt(i) - 96; // assuming lowercase characters
let j = i + 1;
while (j < s.length && s.charCodeAt(j) - 96 === currentWeight) {
j++;
}
for (let k = i; k < j; k++) {
weights.add(currentWeight * (k - i + 1));
}
i = j - 1;
}
const result = [];
for (let query of queries) {
result.push(weights.has(query) ? 'Yes' : 'No');
}
return result;
}
const s = "abccddde";
const queries = [1, 3, 12, 5, 9, 10];
console.log(weightedUniformStrings(s, queries));
Метод 2: подход с суммой префиксов
function weightedUniformStrings(s, queries) {
const weights = new Set();
let currentWeight = 0;
let count = 0;
for (let i = 0; i < s.length; i++) {
if (s[i] === s[i - 1]) {
count++;
} else {
count = 1;
currentWeight = s.charCodeAt(i) - 96; // assuming lowercase characters
}
weights.add(currentWeight * count);
}
const result = [];
for (let query of queries) {
result.push(weights.has(query) ? 'Yes' : 'No');
}
return result;
}
const s = "abccddde";
const queries = [1, 3, 12, 5, 9, 10];
console.log(weightedUniformStrings(s, queries));
Метод 3: подход динамического программирования
function weightedUniformStrings(s, queries) {
const weights = new Set();
const dp = new Array(26).fill(false);
let currentWeight = 0;
for (let i = 0; i < s.length; i++) {
if (s[i] === s[i - 1]) {
currentWeight += s.charCodeAt(i) - 96; // assuming lowercase characters
} else {
currentWeight = s.charCodeAt(i) - 96; // assuming lowercase characters
}
dp[currentWeight] = true;
}
for (let query of queries) {
weights.add(query);
}
const result = [];
for (let weight of weights) {
result.push(dp[weight] ? 'Yes' : 'No');
}
return result;
}
const s = "abccddde";
const queries = [1, 3, 12, 5, 9, 10];
console.log(weightedUniformStrings(s, queries));