算法练习-Day2-找不同

55 阅读2分钟

题目:
给定两个字符串 s 和 t ,它们只包含小写字母。
字符串 t 由字符串 s 随机重排,然后在随机位置添加一个字母。
请找出在 t 中被添加的字母。

示例 1:

输入: s = "abcd", t = "abcde"
输出: "e"
解释: 'e' 是那个被添加的字母。

示例 2:

输入: s = "", t = "y"
输出: "y"

提示:

  • 0 <= s.length <= 1000
  • t.length == s.length + 1
  • s 和 t 只包含小写字母

解答:

  1. 这个是当时学Python时写的

        class Solution(object):
            def findTheDifference(self, s, t):
                """
                :type s: str
                :type t: str
                :rtype: str
                """
                for n in t:
                    if t.count(n) > s.count(n):
                        return n    
    
  2. 这是今天用JavaScript写的

    /**
     * @param {string} s
     * @param {string} t
     * @return {character}
     */
    var findTheDifference = function(s, t) {
        for(let str of t) {
            // 这里要注意find和findIndex都是数组的方法,不要搞混了
            // 字符串的方法是charAt(i)返回下标i对应的字符,没有就返回""
            // indexof(str),在一个字符串里找对应字符str所对应的下标,找不到就返回-1(这个类似于数组的FindIndex)
            // includes:ES6新增的,包含就返回true,不包含就返回false
            if (s.indexOf(str) === -1) {
                return str;
            }
        }
    };
    
  3. 我这只是实现了这个效果,只是在leedCode上能跑通,原因是:

    • LeetCode 的测试用例较小(比如 0 <= s.length <= 1000
    • 设想一下,如果提示中的0 <= s.length <= 1000变成0 <= s.length <= 10^9, 这个算法还能算是算法吗?
    • 计算机的性能只有两个维度:一是时间;一是空间;我的这两个时间复杂度都是O(n^2)
    • 更好地方法大家自己问AI吧

知识点总结:

  1. 字符串方法
方法名作用返回值是否区分大小写适用场景
indexOf()返回子字符串的首次出现位置number(索引,未找到返回 -1✅ 是精确查找位置
charAt()返回字符串指定位置的字符string(单字符,越界返回空串 ""❌ 不涉及按索引取字符
includes()检查是否包含子字符串booleantrue/false✅ 是快速判断是否存在某字符串

  1. includes是ES6新增的,但不是所有的可迭代对象都有这个方法,这个方法只有Array,String适用
  2. find()和findIndex()只有Array类型可以调用