题目:
给定两个字符串 s 和 t ,它们只包含小写字母。
字符串 t 由字符串 s 随机重排,然后在随机位置添加一个字母。
请找出在 t 中被添加的字母。
示例 1:
输入: s = "abcd", t = "abcde"
输出: "e"
解释: 'e' 是那个被添加的字母。
示例 2:
输入: s = "", t = "y"
输出: "y"
提示:
0 <= s.length <= 1000t.length == s.length + 1s和t只包含小写字母
解答:
-
这个是当时学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 -
这是今天用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; } } }; -
我这只是实现了这个效果,只是在leedCode上能跑通,原因是:
- LeetCode 的测试用例较小(比如
0 <= s.length <= 1000) - 设想一下,如果提示中的
0 <= s.length <= 1000变成0 <= s.length <= 10^9, 这个算法还能算是算法吗? - 计算机的性能只有两个维度:一是时间;一是空间;我的这两个时间复杂度都是O(n^2)
- 更好地方法大家自己问AI吧
- LeetCode 的测试用例较小(比如
知识点总结:
- 字符串方法
| 方法名 | 作用 | 返回值 | 是否区分大小写 | 适用场景 |
|---|---|---|---|---|
indexOf() | 返回子字符串的首次出现位置 | number(索引,未找到返回 -1) | ✅ 是 | 精确查找位置 |
charAt() | 返回字符串指定位置的字符 | string(单字符,越界返回空串 "") | ❌ 不涉及 | 按索引取字符 |
includes() | 检查是否包含子字符串 | boolean(true/false) | ✅ 是 | 快速判断是否存在某字符串 |
- includes是ES6新增的,但不是所有的可迭代对象都有这个方法,这个方法只有Array,String适用
- find()和findIndex()只有Array类型可以调用