[前端经典题目]——字符串处理类(2)
1、查找一篇英文文章中出现频率最高的单词
题目描述
查找一篇英文文章中出现频率最高的单词,输出该单词及出现个数。
代码
function findMostWord(article) {
// 合法性判断
if (!article) return;
// 参数处理
article = article.trim().toLowerCase();
//拆分单词
let wordList = article.match(/[a-z]+/g);
//重新拼接文章,此时文章中每个单词直接有空格隔开
article = " " + wordList.join(" ") + " ";
let wordListSet = new Set(), //把已经查询过的单词放入 Set 中,避免重复查询。
maxNum = 0,
maxWord = "";
wordList.forEach((item) => {
if (!wordListSet.has(item)) {
wordListSet.add(item);
let world = new RegExp(" " + item + " ", "g"),
num = article.match(world).length;
if (num > maxNum) {
maxNum = num;
maxWord = item;
}
}
});
return maxWord + " " + maxNum;
}
let article = "Hello world the who,is in the hello hello Ping folkd hello";
let res = findMostWord(article);
console.log(res);
2、从字符串中查找合法的 IP 段
题目描述
给定一个只包含数字的字符串 s ,用以表示一个 IP 地址,
返回所有可能的有效 IP 地址
这些地址可以通过在 s 中插入 ‘.’ 来形成。
–
输入:s = ‘25525511135’
输出:[‘255.255.11.135’,‘255.255.111.35’]
–
有效 IP 地址正好由四个整数组成,中间使用 ‘.’ 分割,
每个整数位于 0 到 255 之间组成,不能含有前导 0
例如: ‘0.1.2.201’ 是有效的,‘0.011.255.245’ 是无效的
代码
function resolveIP(str) {
const res = [];
// 合法性判断
if (str.length < 4 && str.length > 12) {
return res;
}
for (let a = 1; a < 4; a++) {
for (let b = 1; b < 4; b++) {
for (let c = 1; c < 4; c++) {
const d = str.length - a - b - c;
if (d >= 1 && d <= 3) {
const one = str.substring(0, a);
const two = str.substring(a, a + b);
const three = str.substring(a + b, a + b + c);
const four = str.substring(a + b + c);
if (isValid(one) && isValid(two) && isValid(three) && isValid(four)) {
res.push(`${one}.${two}.${three}.${four}`);
}
}
}
}
}
return res;
}
//检测分割字符串合法性
function isValid(str) {
const one = +str === 0 && str.length === 1; //等于 0 且只有一位
const two = +str > 0 && str.charAt(0) !== "0";//大于 0 且前导不为 0
const three = +str <= 255;
return (one || two) && three;
}
const res1 = "25525511135";
const res2 = "11101";
console.log(resolveIP(res1)); //[ '255.255.11.135', '255.255.111.35' ]
console.log(resolveIP(res2)); //[ '1.1.10.1', '1.11.0.1', '11.1.0.1' ]
3、根据一个对象进行字符串替换解析
题目描述
实现函数使得将str字符串中的{}内的变量替换,如果属性不存在保持原样(比如{a.d})
var a = {
b: 123,
c: ‘456’,
e: ‘789’,
}
var str=a{a.b}aa{a.c}aa {a.d}aaaa
;
替换结果 ‘a123aa456aa {a.d}aaaa’
代码
function fn(obj, str) {
str = str.split("{").map((item) => {
if (item.indexOf("}") !== -1) {
return item.split("}");
} else {
return item;
}
});
//把二维数组打平为一维
str = str.flat();
str = str.map((item) => {
let key, value;
if (item.indexOf(".") !== -1) {
key = item.split(".")[1];
value = obj[key];
if (value == undefined) {
return "{" + item + "}"; //obj中不存在该属性值时,要回复原样
} else {
return value;
}
} else {
return item;
}
});
str = str.join("");
return str;
}
let a = {
b: 123,
c: "456",
e: "789",
};
let str = `a{a.b}aa{a.c}aa {a.d}aaaa`;
let res = fn(a, str);
console.log(res);