LeetCode重新格式化字符串使用JavaScript解题|前端学算法

简介: LeetCode重新格式化字符串使用JavaScript解题|前端学算法

重新格式化字符串


给你一个混合了数字和字母的字符串 s,其中的字母均为小写英文字母。

请你将该字符串重新格式化,使得任意两个相邻字符的类型都不同。也就是说,字母后面应该跟着数字,而数字后面应该跟着字母。

请你返回 重新格式化后 的字符串;如果无法按要求重新格式化,则返回一个 空字符串 。

示例 1:

输入:s = "a0b1c2"

输出:"0a1b2c"

解释:"0a1b2c" 中任意两个相邻字符的类型都不同。 "a0b1c2", "0a1b2c", "0c2a1b" 也是满足题目要求的答案。


示例 2:

输入:s = "leetcode"

输出:""

解释:"leetcode" 中只有字母,所以无法满足重新格式化的条件。


示例 3:

输入:s = "1229857369"

输出:""

解释:"1229857369" 中只有数字,所以无法满足重新格式化的条件。


解题思路


只有字符的数量相等或者相差一个才能使任意两个相邻字符都不相同。并且数量少的那一方必须在数量多的中间,也就是说数量多的必须要最先开始,第一个必须是数量多的

ok,重要的事情分析完了,接下来开始写具体步骤


  • 第一步:定义两个数组,一个存储字符strList,一个存储数字numList,再定义一个res用于存储格式化后的字符串
  • 第二步:遍历一遍字符串s,分别将每项存入对应的数组
  • 第三步:判断一下数字长度与字符长度差值,如果大于1,就直接返回空字符串
  • 第四步:如果小于等于1,比较一下两个数组的长度,则根据最短的数组的长度,来遍历两个数组res += numList[i] + strList[i],记住第一个字符是数字
  • 第五步:如果两个数组长度相同,直接返回res;如果不相同,因为第一个字符是数字,数字比字符长的话就插入到最后,短的话就插入到最前面
var reformat = function (s) {
    let numList = [];
    let strList = [];
    for (let i = 0; i < s.length; i++) {
        if (isNaN(s[i])) {//说明是字母
            strList.push(s[i])
        } else {
            // 是数字
            numList.push(s[i])
        }
    }
    if (Math.abs(numList.length - strList.length) > 1) return "";
    let res = "";
    let minLen = Math.min(numList.length, strList.length);
    for (let i = 0; i < minLen; i++) {
        res += numList[i] + strList[i];
    }
    if(numList.length > strList.length){
        res= res+numList[numList.length-1]
    }else if(numList.length < strList.length){
        res= strList[strList.length-1]+res
    }else{
        return res
    }
    return res;
};


image.png


知识点


  • Math.abs(x) 函数返回指定数字 x 的绝对值。



目录
相关文章
|
14天前
|
算法 Java
[Java·算法·简单] LeetCode 283. 移动零
[Java·算法·简单] LeetCode 283. 移动零
17 2
|
14天前
|
算法 Java
[Java·算法·中等] LeetCode21. 合并两个有序链表
[Java·算法·中等] LeetCode21. 合并两个有序链表
15 2
|
17天前
|
存储 算法 调度
力扣中级算法(Python)
力扣中级算法(Python)
|
17天前
|
算法 C++
【数据结构与算法】:关于时间复杂度与空间复杂度的计算(C/C++篇)——含Leetcode刷题-2
【数据结构与算法】:关于时间复杂度与空间复杂度的计算(C/C++篇)——含Leetcode刷题
|
17天前
|
算法 C++
【数据结构与算法】:关于时间复杂度与空间复杂度的计算(C/C++篇)——含Leetcode刷题-1
【数据结构与算法】:关于时间复杂度与空间复杂度的计算(C/C++篇)——含Leetcode刷题
|
18天前
|
算法
【经典LeetCode算法题目专栏分类】【第10期】排序问题、股票问题与TOP K问题:翻转对、买卖股票最佳时机、数组中第K个最大/最小元素
【经典LeetCode算法题目专栏分类】【第10期】排序问题、股票问题与TOP K问题:翻转对、买卖股票最佳时机、数组中第K个最大/最小元素
|
18天前
|
算法
【经典LeetCode算法题目专栏分类】【第11期】递归问题:字母大小写全排列、括号生成
【经典LeetCode算法题目专栏分类】【第11期】递归问题:字母大小写全排列、括号生成
|
18天前
|
索引
【LeetCode刷题】二分查找:山脉数组的峰顶索引、寻找峰值
【LeetCode刷题】二分查找:山脉数组的峰顶索引、寻找峰值
|
18天前
|
算法
【LeetCode刷题】滑动窗口解决问题:串联所有单词的子串(困难)、最小覆盖子串(困难)
【LeetCode刷题】滑动窗口解决问题:串联所有单词的子串(困难)、最小覆盖子串(困难)
|
18天前
|
算法 容器
【LeetCode刷题】滑动窗口解决问题:水果成篮、找到字符串中所有字母异位词
【LeetCode刷题】滑动窗口解决问题:水果成篮、找到字符串中所有字母异位词