找到字符串中所有字母异位词
找到字符串中所有字母异位词
给定两个字符串 s 和 p,找到 s 中所有 p 的 异位词 的子串,返回这些子串的起始索引。不考虑答案输出的顺序。异位词 指由相同字母重排列形成的字符串(包括相同的字符串)。
输入: s = “cbaebabacd”, p = “abc”
输出: [0,6]
解释:起始索引等于 0 的子串是 “cba”, 它是 “abc” 的异位词。起始索引等于 6 的子串是 “bac”, 它是 “abc” 的异位词。
输入: s = “abab”, p = “ab”
输出: [0,1,2]
解释:起始索引等于 0 的子串是 “ab”, 它是 “ab” 的异位词。起始索引等于 1 的子串是 “ba”, 它是 “ab” 的异位词。起始索引等于 2 的子串是 “ab”, 它是 “ab” 的异位词。
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455var originalDigits = function(s ...
自定义字符串排序
自定义字符串排序
给定两个字符串 order 和 s 。order 的所有字母都是 唯一 的,并且以前按照一些自定义的顺序排序。对 s 的字符进行置换,使其与排序的 order 相匹配。更具体地说,如果在 order 中的字符 x 出现字符 y 之前,那么在排列后的字符串中, x 也应该出现在 y 之前。返回 满足这个性质的 s 的任意一种排列 。
输入: order = “cba”, s = “abcd”
输出: “cbad”
解释:“a”、“b”、“c”是按顺序出现的,所以“a”、“b”、“c”的顺序应该是“c”、“b”、“a”。因为“d”不是按顺序出现的,所以它可以在返回的字符串中的任何位置。“dcba”、“cdba”、“cbda”也是有效的输出。
输入: order = “cbafg”, s = “abcd”
输出: “cbad”-
123var customSortString = function(order, s) { return [...s].sort((a, b) => order.indexOf(a) - order.inde ...
从英文中重建数字
从英文中重建数字
给你一个字符串 s ,其中包含字母顺序打乱的用英文单词表示的若干数字(0-9)。按 升序 返回原始的数字。
输入:s = “owoztneoer”
输出:”012”
输入:s = “fviefuro”
输出:”45”
1234567891011121314151617181920212223242526272829303132333435363738var originalDigits = function(s) { const eng = [ { index: 0, en: 'zero' }, { index: 6, en: 'six' }, { index: 8, en: 'eight' }, { index: 2, en: 'two' }, { index: 3, en: 'three& ...
两个字符串的删除操作
两个字符串的删除操作
给定两个单词 word1 和 word2 ,返回使得 word1 和 word2 相同所需的最小步数。每步 可以删除任意一个字符串中的一个字符。
输入: word1 = “sea”, word2 = “eat”
输出: 2
解释: 第一步将 “sea” 变为 “ea” ,第二步将 “eat “变为 “ea”
输入:word1 = “leetcode”, word2 = “etco”
输出:4
动态规划dp[i][j] 表示 word1 的前 i 个和 word2 的前 j 个变的相同的最小步数。当 word1[i - 1] == word2[j - 1] 时,无需改变最后一个,所以 dp[i][j] = dp[i - 1][j - 1]。当 word1[i - 1] != word2[j - 1] 时,要么删除 word1[i - 1],要么删除 word2[j - 1],所以 dp[i][j] = 1 + min(dp[i - 1][j], dp[i][j - 1])。
12345678910111213141516var minDistan ...
单词替换
单词替换
在英语中,我们有一个叫做 词根(root) 的概念,可以词根后面添加其他一些词组成另一个较长的单词——我们称这个词为 继承词(successor)。例如,词根 an,跟随着单词 other(其他),可以形成新的单词 another(另一个)。现在,给定一个由许多词根组成的词典 dictionary 和一个用空格分隔单词形成的句子 sentence。你需要将句子中的所有继承词用词根替换掉。如果继承词有许多可以形成它的词根,则用最短的词根替换它。你需要输出替换之后的句子。
输入:dictionary = [“cat”,”bat”,”rat”], sentence = “the cattle was rattled by the battery”
输出:”the cat was rat by the bat”
输入:dictionary = [“a”,”b”,”c”], sentence = “aadsfasf absbs bbab cadsfafs”
输出:”a a b c”
123456789101112var replaceWords = function(di ...
最小时间差
最小时间差
给定一个 24 小时制(小时:分钟 “HH:MM”)的时间列表,找出列表中任意两个时间的最小时间差并以分钟数表示。
输入:timePoints = [“23:59”,”00:00”]
输出:1
输入:timePoints = [“00:00”,”23:59”,”00:00”]
输出:0
1234567891011121314151617181920const getTime = str => { const [hour, min] = str.split(':'); return Number(hour) * 60 + Number(min);};const findMinDifference = timePoints => { // 所有时间转化为分钟 const mins = timePoints.map(item => getTime(item)); // 升序排序 mins.sort((a, b) => a - b); const len ...
通过删除字母匹配到字典里最长单词
通过删除字母匹配到字典里最长单词
给你一个字符串 s 和一个字符串数组 dictionary ,找出并返回 dictionary 中最长的字符串,该字符串可以通过删除 s 中的某些字符得到。如果答案不止一个,返回长度最长且字母序最小的字符串。如果答案不存在,则返回空字符串。
输入:s = “abpcplea”, dictionary = [“ale”,”apple”,”monkey”,”plea”]
输出:”apple”
输入:s = “abpcplea”, dictionary = [“a”,”b”,”c”]
输出:”a”
1234567891011121314151617181920212223242526272829303132333435363738394041var findLongestWord = function(s, dictionary) { let ret = []; for (let i = 0; i < dictionary.length; i++) { let top = 0; ...
两个列表的最小索引总和
两个列表的最小索引总和
假设 Andy 和 Doris 想在晚餐时选择一家餐厅,并且他们都有一个表示最喜爱餐厅的列表,每个餐厅的名字用字符串表示。你需要帮助他们用最少的索引和找出他们共同喜爱的餐厅。 如果答案不止一个,则输出所有答案并且不考虑顺序。 你可以假设答案总是存在。
输入: list1 = [“Shogun”, “Tapioca Express”, “Burger King”, “KFC”],list2 = [“Piatti”, “The Grill at Torrey Pines”, “Hungry Hunter Steakhouse”, “Shogun”]
输出: [“Shogun”]
解释: 他们唯一共同喜爱的餐厅是“Shogun”。
输入:list1 = [“Shogun”, “Tapioca Express”, “Burger King”, “KFC”],list2 = [“KFC”, “Shogun”, “Burger King”]
输出: [“Shogun”]
解释: 他们共同喜爱且具有最小索引和的餐厅是“Shogun”,它有最小的索引和 1(0+1 ...
机器人能否返回原点
机器人能否返回原点
在二维平面上,有一个机器人从原点 (0, 0) 开始。给出它的移动顺序,判断这个机器人在完成移动后是否在 (0, 0) 处结束。移动顺序由字符串 moves 表示。字符 move[i] 表示其第 i 次移动。机器人的有效动作有 R(右),L(左),U(上)和 D(下)。如果机器人在完成所有动作后返回原点,则返回 true。否则,返回 false。注意:机器人“面朝”的方向无关紧要。 “R” 将始终使机器人向右移动一次,“L” 将始终向左移动等。此外,假设每次移动机器人的移动幅度相同。
输入: moves = “UD”
输出: true
解释:机器人向上移动一次,然后向下移动一次。所有动作都具有相同的幅度,因此它最终回到它开始的原点。因此,我们返回 true。
输入: moves = “LL”
输出: false
解释:机器人向左移动两次。它最终位于原点的左侧,距原点有两次 “移动” 的距离。我们返回 false,因为它在移动结束时没有返回原点。
12345678910var judgeCircle = function(moves) { ...
反转字符串 II
反转字符串 II
给定一个字符串 s 和一个整数 k,从字符串开头算起,每计数至 2k 个字符,就反转这 2k 字符中的前 k 个字符。如果剩余字符少于 k 个,则将剩余字符全部反转。如果剩余字符小于 2k 但大于或等于 k 个,则反转前 k 个字符,其余字符保持原样。
输入:s = “abcdefg”, k = 2
输出:”bacdfeg”
输入:s = “abcd”, k = 2
输出:”bacd”
123456789101112131415161718192021var reverseStr = function(s, k) { if(k == 1) return s let result = '' let temp = '' let dobulek = 2 * k for (let i = 0; i < s.length; i++) { const element = s[i]; let kyu = i % dobulek if ...

