前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >算法_比较字符串&字符串密钥格式

算法_比较字符串&字符串密钥格式

作者头像
OBKoro1
发布2020-10-27 11:54:26
8660
发布2020-10-27 11:54:26
举报
文章被收录于专栏:OBKoro1的前端分享

比较字符串

难度:简单

描述:

比较两个字符串 A 和 B,确定 A 中是否包含 B 中所有的字符。字符串 A 和 B 中的字符都是 大写字母

样例:

给出 A = "ABCD" B = "ACD",返回 true

给出 A = "ABCD" B = "AABC", 返回 false

代码模板:

代码语言:javascript
复制
/**
 * @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) {};

思路分析:

将字符串转成数组来处理

想一想再看答案

想一想再看答案

想一想再看答案

代码:

代码语言:javascript
复制
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吧

字符串密钥格式

难度:简单

描述:

  1. 给定字符串 S(非空),字符串 S 仅由字母数字字符(a-z 和/或 A-Z 和/或 0-9)和短划线( - )组成。
  2. 给定正整数 K,我们希望重新格式化字符串,使得每个组包含正好的 K 个字符,但第一个组可能比 K 短,但仍必须包含至少一个字符。
  3. 必须在两个组之间插入短划线,并且所有小写字母都应转换为大写

样例:

Input: S = "5F3Z-2e-9-w", K = 4

Output: "5F3Z-2E9W"

Input: S = "2-5g-3-J", K = 2

Output: "2-5G-3J"

思路分析:

处理字符串通常需要转成数组来处理,仔细观察输出和规则,总结规律。

代码:

  1. 去掉-,等下用join连接。
  2. 字符串长度不能被K整除的话,需取余,将不能整除的部分拿出来。
  3. 然后每隔几个K每割一下字符串,这里用了正则,返回一个数组。
  4. 再跟之前被拿出来的部分,合并成一个数组。
  5. join将数组转成字符串。
代码语言:javascript
复制
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)
);
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2018-09-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 OBKoro1前端进阶积累 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 比较字符串
    • 难度:简单
      • 描述:
        • 样例:
          • 代码模板:
            • 思路分析:
              • 想一想再看答案
                • 想一想再看答案
                  • 想一想再看答案
                    • 代码:
                      • 鼓励我一下:
                      • 字符串密钥格式
                        • 难度:简单
                          • 描述:
                            • 样例:
                              • 思路分析:
                                • 代码:
                                领券
                                问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档