1.删除字符串中的所有相邻重复项
题目:
给出由小写字母组成的字符串 S,重复项删除操作会选择两个相邻且相同的字母,并删除它们。
在 S 上反复执行重复项删除操作,直到无法继续删除。
在完成所有重复项删除操作后返回最终的字符串。答案保证唯一。
思路:用栈记录保存的字符,然后比较
/**
* @param {string} S
* @return {string}
*/
var removeDuplicates = function(S) {
S = S.split("");
const res = [];
const l = S.length;
for (const s of S) {
if (res.length && res[res.length - 1] == s) {
res.pop();
} else {
res.push(s);
}
}
return res.join("");
};
2.高度检查器
题目:
学校在拍年度纪念照时,一般要求学生按照 非递减 的高度顺序排列。
请你返回能让所有学生以 非递减 高度排列的最小必要移动人数。
注意,当一组学生被选中时,他们之间可以以任何可能的方式重新排序,而未被选中的学生应该保持不动。
思路:对数组排序,比较排序之后的数组和原数组的差异项的数量
/**
* @param {string} S
* @return {string}
*/
var removeDuplicates = function(S) {
S = S.split("");
const res = [];
const l = S.length;
for (const s of S) {
if (res.length && res[res.length - 1] == s) {
res.pop();
} else {
res.push(s);
}
}
return res.join("");
};
3.字符串的最大公因子
题目:
对于字符串 S 和 T,只有在 S = T + ... + T(T 与自身连接 1 次或多次)时,我们才认定 “T 能除尽 S”。
返回最长字符串 X,要求满足 X 能除尽 str1 且 X 能除尽 str2。
思路:和数字的最大公因数很像,可以先判断是否有公因子,然后计算最大公因数的长度,及两个字符串长度的最大公因数
/**
* @param {string} str1
* @param {string} str2
* @return {string}
*/
const gcd = (a, b) => (0 === b ? a : gcd(b, a % b));
var gcdOfStrings = function (str1, str2) {
if (`${str1}${str2}` !== `${str2}${str1}`) return "";
return str1.slice(0, gcd(str1.length, str2.length));
};
4.Bigram分词
题目:
给出第一个词 first 和第二个词 second,考虑在某些文本 text 中可能以 "first second third" 形式出现的情况,其中 second 紧随 first 出现,third 紧随 second 出现。
对于每种这样的情况,将第三个词 "third" 添加到答案中,并返回答案。
题目:将单词分割成数组
/**
* @param {string} text
* @param {string} first
* @param {string} second
* @return {string[]}
*/
var findOcurrences = function(text, first, second) {
const word = text.split(" ");
const l = word.length;
const res = [];
for (var i = 0; i < l; i++) {
if (word[i] == first && word[i + 1] == second) {
if (i < l - 2) res.push(word[i + 2]);
}
}
return res;
};
5.复写零
题目:
给你一个长度固定的整数数组 arr,请你将该数组中出现的每个零都复写一遍,并将其余的元素向右平移。
注意:请不要在超过该数组长度的位置写入元素。
要求:请对输入的数组 就地 进行上述修改,不要从函数返回任何东西。
思路:遍历数组,遇到0就插入,并且删除数组的最后一个成员
/**
* @param {number[]} arr
* @return {void} Do not return anything, modify arr in-place instead.
*/
var duplicateZeros = function(arr) {
let index = 0;
while (index < arr.length) {
if (arr[index] == 0) {
arr.splice(index, 0, 0);
arr.pop();
index++;
}
index++;
}
};