比较两个字符串 A 和 B,确定 A 中是否包含 B 中所有的字符。字符串 A 和 B 中的字符都是 大写字母
给出 A = "ABCD" B = "ACD",返回 true
给出 A = "ABCD" B = "AABC", 返回 false
/**
* @param A: A string
* @param B: A string
* @return: if string A contains all of the characters in B return true else return false
*/
const compareStrings = function(A, B) {};
将字符串转成数组来处理
const compareStrings = function(A, B) {
[A, B] = [[...A], [...B]]; // 转成数组操作
for (let index of B.keys()) {
if (A.indexOf(B[index]) !== -1) {
// B数组元素和A数组元素成功匹配
A.splice(find, 1); // 删除A数组中已匹配到的,保持数量相等
} else {
return false; // B数组中有A不包含的字符串
}
}
return true;
};
console.log(compareStrings('ABCD', 'ACD'), compareStrings('ABC', 'A'));
觉得还不错的话,给我的点个star吧
Input: S = "5F3Z-2e-9-w", K = 4
Output: "5F3Z-2E9W"
Input: S = "2-5g-3-J", K = 2
Output: "2-5G-3J"
处理字符串通常需要转成数组来处理,仔细观察输出和规则,总结规律。
-
,等下用join
连接。K
每割一下字符串,这里用了正则,返回一个数组。join
将数组转成字符串。const licenseKeyFormatting = function(S, K) {
S = S.replace(/-/g, ''); // 去掉所有的-
let total = [...S].length; // 字符串总数
let num = total % K; // 取余
let strArr = []; // 字符串剩余的放在这个数组中
// 字符串余数
if (num !== 0) {
var str = '';
var arr = [...S];
var i = 0;
for (let item of arr.keys()) {
i++;
str += arr[item]; // 有多少个余数就将多少个字符 添加到字符串中
if (i === num) break;
}
arr.splice(0, num); // 删除已被添加的字符
S = arr.join(''); // S重新变为字符串 用于下面操作
strArr[0] = str; // 添加到数组 等下用于连接
}
let spliceNum = `\\w{${K}}`; // 几个字符串为一个间隔
let reg = new RegExp(spliceNum, 'gim');
let strArr2 = S.match(reg); // 切割字符串返回数组
strArr = strArr.concat(strArr2); // 连接余数数组和切割的数组
S = strArr.join('-').toUpperCase(); // 连接字符串 并转为大写
return S;
};
console.log(
licenseKeyFormatting('5F3Z-2e-9-w', 4),
licenseKeyFormatting('2-5g-3-J', 2)
);
本文分享自 OBKoro1前端进阶积累 微信公众号,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文参与 腾讯云自媒体同步曝光计划 ,欢迎热爱写作的你一起参与!