特斯拉2023春招笔试题1、2--JS

第一题:

题目描述:

给你两个字符串 s 和 goal ,只要我们可以通过交换 s 中的两个字母得到与 goal 相等的结果,就返回 true ;否则返回 false 。

交换字母的定义是:取两个下标 i 和 j (下标从 0 开始)且满足 i != j ,接着交换 s[i] 和 s[j] 处的字符。

例如,在 "abcd" 中交换下标 0 和下标 2 的元素可以生成 "cbad" 。

来源:力扣(LeetCode)

链接:https://leetcode.cn/problems/buddy-strings

解题思路在代码中,见如下代码:

var buddyStrings = function(s, goal) {
    // 如果字符串长度不等,直接返回 false
    if(s.length!==goal.length) return false;

    // 定义存储下角标的数组
    let indexList =[];
    // 将字符串变为值的形式
    let new_s = s.split('');
    let new_goal = goal.split('');
 
    // 如果字符串不相等 eg.bab 和 abb 将两个下角标存入 indexList
    for(var i = 0; i < new_s.length; i++) {
        if(new_s[i] !== new_goal[i]) {
            indexList.push(i);
        }
    }
    // 不相等元素构成的数组的长度
    let num = indexList.length;
    // 如果是 abac 和 abad 不相等的部分只有一个,indexList 长度为 1,直接返回 false
    if(num === 1) return false;

    // 对字符串去重
    let reset = [...new Set([...new_s])];
    // 如果是 aa 和 aa, 它的 indexList 是 0,reset.length 是 1 
    // 如果是 ab 和 ab, 它的 indexList 是 0,reset.length 是 2
    // reset.length 是去重后的字符串长度,new_s 是原始字符串长度
    // 如果 reset.length != new_s.length,说明有重复的元素可以交换返回 true
    // 如果 reset.length === new_s.length,说明都是单一的元素构成的字符串,返回 false
    let same_item = reset.length === new_s.length;
    // 如果字符串相等,eg.aaab 和 aaab 或者 ab 和 ab
    if(num === 0) return !same_item; 
    // 不一样的元素超过题目规定的两个
    if(num > 2) return false;
    // 字符串不相等时,将 indexList 中存储的 下角标 对应的完成元素交换
    if(num == 2) {
        // 元素交换
        let temp = 0;
        temp = new_s[indexList[0]];
        new_s[indexList[0]] = new_s[indexList[1]];
        new_s[indexList[1]] = temp;
        return new_s.join('') == new_goal.join('');
    }  
};

第二题:

题目描述:

给你一个字符串 croakOfFrogs,它表示不同青蛙发出的蛙鸣声(字符串 "croak" )的组合。由于同一时间可以有多只青蛙呱呱作响,所以 croakOfFrogs 中会混合多个 “croak” 。

请你返回模拟字符串中所有蛙鸣所需不同青蛙的最少数目。

要想发出蛙鸣 "croak",青蛙必须 依序 输出 ‘c’, ’r’, ’o’, ’a’, ’k’ 这 5 个字母。如果没有输出全部五个字母,那么它就不会发出声音。如果字符串 croakOfFrogs 不是由若干有效的 "croak" 字符混合而成,请返回 -1 。

来源:力扣(LeetCode)

链接:https://leetcode.cn/problems/minimum-number-of-frogs-croaking

解题思路在代码中,见如下代码:

var minNumberOfFrogs = function(croakOfFrogs) {
    var n = croakOfFrogs.length;
    // 定义每个字符的计数器
    var count_c = 0;
    var count_r = 0;
    var count_o= 0; 
    var count_a = 0;
    var count_k = 0;
    var con = 0;
    for(var i = 0; i < n; i++) {
        const index = croakOfFrogs[i];
        if(index === 'c') count_c++;
        if(index === "r") count_r++;
        if(index === "o") count_o++;
        if(index === "a") count_a++;
        if(index === "k") count_k++;
        // 取叫声的最大值
        con = Math.max(count_c, con);
        // 如果字符顺序不同,不是有效字符串
        if(count_c < count_r || count_r < count_o || count_o < count_a || count_a < count_k) return -1;
        // 在一只青蛙连续叫的时候
        if (count_k === 1) {
            count_c--;
            count_r--;
            count_o--;
            count_a--;
            count_k--;
        }
    }
    if(count_c==count_r&&count_r==count_o&&count_o==count_a&&count_a==count_k) return con;
    else return -1;
};
  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

低保和光头哪个先来

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值