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 的绝对值。



目录
相关文章
|
1月前
|
算法
Leetcode 初级算法 --- 数组篇
Leetcode 初级算法 --- 数组篇
38 0
|
12天前
|
存储 算法 Java
leetcode算法题-有效的括号(简单)
【11月更文挑战第5天】本文介绍了 LeetCode 上“有效的括号”这道题的解法。题目要求判断一个只包含括号字符的字符串是否有效。有效字符串需满足左括号必须用相同类型的右括号闭合,并且左括号必须以正确的顺序闭合。解题思路是使用栈数据结构,遍历字符串时将左括号压入栈中,遇到右括号时检查栈顶元素是否匹配。最后根据栈是否为空来判断字符串中的括号是否有效。示例代码包括 Python 和 Java 版本。
|
1月前
|
人工智能 自然语言处理 程序员
通义灵码:融合创新玩法与探索,重塑LeetCode解题策略
欢迎来到工程师令狐小哥的频道。本文介绍如何利用AI工具高效刷LeetCode,通过通义灵码插件在IntelliJ IDEA中实现代码生成、优化、单元测试等功能,提升编程学习效率。
63 1
通义灵码:融合创新玩法与探索,重塑LeetCode解题策略
|
1月前
|
算法
每日一道算法题(Leetcode 20)
每日一道算法题(Leetcode 20)
23 2
|
1月前
|
移动开发 算法 前端开发
前端常用算法全解:特征梳理、复杂度比较、分类解读与示例展示
前端常用算法全解:特征梳理、复杂度比较、分类解读与示例展示
21 0
|
2月前
|
算法 前端开发 机器人
一文了解分而治之和动态规则算法在前端中的应用
该文章详细介绍了分而治之策略和动态规划算法在前端开发中的应用,并通过具体的例子和LeetCode题目解析来说明这两种算法的特点及使用场景。
一文了解分而治之和动态规则算法在前端中的应用
|
3月前
|
JavaScript 算法 前端开发
JS算法必备之String常用操作方法
这篇文章详细介绍了JavaScript中字符串的基本操作,包括创建字符串、访问特定字符、字符串的拼接、位置查找、大小写转换、模式匹配、以及字符串的迭代和格式化等方法。
JS算法必备之String常用操作方法
|
3月前
|
JavaScript 算法 前端开发
JS算法必备之Array常用操作方法
这篇文章详细介绍了JavaScript中数组的创建、检测、转换、排序、操作方法以及迭代方法等,提供了数组操作的全面指南。
JS算法必备之Array常用操作方法
|
2月前
|
算法 前端开发
一文了解贪心算法和回溯算法在前端中的应用
该文章深入讲解了贪心算法与回溯算法的原理及其在前端开发中的具体应用,并通过分析LeetCode题目来展示这两种算法的解题思路与实现方法。
|
3月前
|
JavaScript 算法 前端开发
"揭秘Vue.js的高效渲染秘诀:深度解析Diff算法如何让前端开发快人一步"
【8月更文挑战第20天】Vue.js是一款备受欢迎的前端框架,以其声明式的响应式数据绑定和组件化开发著称。在Vue中,Diff算法是核心之一,它高效计算虚拟DOM更新时所需的最小实际DOM变更,确保界面快速准确更新。算法通过比较新旧虚拟DOM树的同层级节点,递归检查子节点,并利用`key`属性优化列表更新。虽然存在局限性,如难以处理跨层级节点移动,但Diff算法仍是Vue高效更新机制的关键,帮助开发者构建高性能Web应用。
70 1