面试经典-电话号码的字母组合
电话号码的字母组合一、题目17. 电话号码的字母组合 给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。 给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。 示例 1: 输入:digits = "23"输出:["ad","ae","af","bd","be","bf","cd","ce","cf"] 示例 2: 输入:digits = ""输出:[] 示例 3: 输入:digits = "2"输出:["a","b","c"] 提示: 0 <= digits.length <= 4 digits[i] 是范围 ['2', '9'] 的一个数字。 二、题解题解一...
面试经典-简化路径
简化路径题目71. 简化路径 给你一个字符串 path ,表示指向某一文件或目录的 Unix 风格 绝对路径 (以 '/' 开头),请你将其转化为 更加简洁的规范路径。 在 Unix 风格的文件系统中规则如下: 一个点 '.' 表示当前目录本身。 此外,两个点 '..' 表示将目录切换到上一级(指向父目录)。 任意多个连续的斜杠(即,'//' 或 '///')都被视为单个斜杠 '/'。 任何其他格式的点(例如,'...' 或 '....')均被视为有效的文件/目录名称。 返回的 简化路径 必须遵循下述格式: 始终以斜杠 '/' 开头。 两个目录名之间必须只有一个斜杠 '/' 。 最后一个目录名(如果存在)不能 以 '/' 结尾。 此外,路径仅包含从根目录到目标文件或目录的路径上的目录(即,不含 '.' 或 '..')。 返回简化后得到的 规范路径 。 示例...
面试经典-有效的括号
有效的括号题目20. 有效的括号 给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效。 有效字符串需满足: 左括号必须用相同类型的右括号闭合。 左括号必须以正确的顺序闭合。 每个右括号都有一个对应的相同类型的左括号。 示例 1: 输入:s = “()” 输出:true 示例 2: 输入:s = “()[]{}” 输出:true 示例 3: 输入:s = “(]” 输出:false 示例 4: 输入:s = “([])” 输出:true 提示: 1 <= s.length <= 104 s 仅由括号 '()[]{}' 组成 题解本体要注意一点,按照正确的顺序😭😭😭😭 12345678910111213141516public boolean isValid(String s) { ...
面试经典-有效的字母异位词
有效的字母异位词题目242. 有效的字母异位词 给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的 字母异位词。 字母异位词 字母异位词是通过重新排列不同单词或短语的字母而形成的单词或短语,并使用所有原字母一次。 示例 1: 12输入: s = "anagram", t = "nagaram"输出: true 示例 2: 12输入: s = "rat", t = "car"输出: false 提示: 1 <= s.length, t.length <= 5 * 104 s 和 t 仅包含小写字母 进阶: 如果输入字符串包含 unicode 字符怎么办?你能否调整你的解法来应对这种情况? 题解题解一 按照同一规则排序后比较是否相同 12345678910public boolean isAnagram(String s, String t) { if (s.length() != t.length()) { ret...
面试经典-无重复字符的最长子串
无重复字符的最长子串题目3. 无重复字符的最长子串 给定一个字符串 s ,请你找出其中不含有重复字符的 最长 子串 的长度。 示例 1: 123输入: s = "abcabcbb"输出: 3 解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。 示例 2: 123输入: s = "bbbbb"输出: 1解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。 示例 3: 1234输入: s = "pwwkew"输出: 3解释: 因为无重复字符的最长子串是 "wke",所以其长度为 3。 请注意,你的答案必须是 子串 的长度,"pwke" 是一个子序列,不是子串。 提示: 0 <= s.length <= 5 * 104 s 由英文字母、数字、符号和空格组成 题解 使用滑动窗口方法,挺简单的 12345678910111213141516public static int length...
面试经典-单词规律
单词规律题目290. 单词规律 给定一种规律 pattern 和一个字符串 s ,判断 s 是否遵循相同的规律。 这里的 遵循 指完全匹配,例如, pattern 里的每个字母和字符串 s 中的每个非空单词之间存在着双向连接的对应规律。 示例1: 12输入: pattern = "abba", s = "dog cat cat dog"输出: true 示例 2: 12输入:pattern = "abba", s = "dog cat cat fish"输出: false 示例 3: 12输入: pattern = "aaaa", s = "dog cat cat dog"输出: false 提示: 1 <= pattern.length <= 300 pattern 只包含小写英文字母 1 <= s.length <= 3000 s 只包含小写英文字母和 ' ' s 不包含 任何前导或尾随对空格 s 中每个单词...
面试经典-同构字符串
同构字符串题目205. 同构字符串 给定两个字符串 s 和 t ,判断它们是否是同构的。 如果 s 中的字符可以按某种映射关系替换得到 t ,那么这两个字符串是同构的。 每个出现的字符都应当映射到另一个字符,同时不改变字符的顺序。不同字符不能映射到同一个字符上,相同字符只能映射到同一个字符上,字符可以映射到自己本身。 示例 1: 12输入:s = "egg", t = "add"输出:true 示例 2: 12输入:s = "foo", t = "bar"输出:false 示例 3: 12输入:s = "paper", t = "title"输出:true 提示: 1 <= s.length <= 5 * 104 t.length == s.length s 和 t 由任意有效的 ASCII 字符组成 题解 和 290. 单词规律 同样的解法 1234567891011121314151617public static boolean...
面试经典-赎金信
赎金信383. 赎金信 给你两个字符串:ransomNote 和 magazine ,判断 ransomNote 能不能由 magazine 里面的字符构成。 如果可以,返回 true ;否则返回 false 。 magazine 中的每个字符只能在 ransomNote 中使用一次。 示例 1: 12输入:ransomNote = "a", magazine = "b"输出:false 示例 2: 12输入:ransomNote = "aa", magazine = "ab"输出:false 示例 3: 12输入:ransomNote = "aa", magazine = "aab"输出:true 提示: 1 <= ransomNote.length, magazine.length <= 105 ransomNote 和 magazine 由小写英文字母组成 题解题解一(暴力法)123456789101112131415161718...
面试经典-文本左右对齐
文本左右对齐题目68. 文本左右对齐 给定一个单词数组 words 和一个长度 maxWidth ,重新排版单词,使其成为每行恰好有 maxWidth 个字符,且左右两端对齐的文本。 你应该使用 “贪心算法” 来放置给定的单词;也就是说,尽可能多地往每行中放置单词。必要时可用空格 ' ' 填充,使得每行恰好有 maxWidth 个字符。 要求尽可能均匀分配单词间的空格数量。如果某一行单词间的空格不能均匀分配,则左侧放置的空格数要多于右侧的空格数。 文本的最后一行应为左对齐,且单词之间不插入额外的空格。 注意: 单词是指由非空格字符组成的字符序列。 每个单词的长度大于 0,小于等于 maxWidth。 输入单词数组 words 至少包含一个单词。 示例 1: 1234567输入: words = ["This", "is", "an", "example", "of", "text", "justification."],...
面试经典-判断子序列
面试经典-判断子序列题目详情392. 判断子序列 给定字符串 s 和 t ,判断 s 是否为 t 的子序列。 字符串的一个子序列是原始字符串删除一些(也可以不删除)字符而不改变剩余字符相对位置形成的新字符串。(例如,"ace"是"abcde"的一个子序列,而"aec"不是)。 进阶: 如果有大量输入的 S,称作 S1, S2, … , Sk 其中 k >= 10亿,你需要依次检查它们是否为 T 的子序列。在这种情况下,你会怎样改变代码? 示例 1: 输入:s = “abc”, t = “ahbgdc”输出:true 示例 2: 输入:s = “axc”, t = “ahbgdc”输出:false 提示: 0 <= s.length <= 100 0 <= t.length <= 10^4 两个字符串都只由小写字符组成。 题解12345678910111213141516171819202122public static boo...
面试经典-验证回文串
面试经典-验证回文串题目详情125. 验证回文串 如果在将所有大写字符转换为小写字符、并移除所有非字母数字字符之后,短语正着读和反着读都一样。则可以认为该短语是一个 回文串 。 字母和数字都属于字母数字字符。 给你一个字符串 s,如果它是 回文串 ,返回 true ;否则,返回 false 。 示例 1: 输入: s = “A man, a plan, a canal: Panama”输出:true解释:”amanaplanacanalpanama” 是回文串。 示例 2: 输入:s = “race a car”输出:false解释:”raceacar” 不是回文串。 示例 3: 输入:s = “ “输出:true解释:在移除非字母数字字符之后,s 是一个空字符串 “” 。由于空字符串正着反着读都一样,所以是回文串。 提示: 1 <= s.length <= 2 * 105 s 仅由可打印的 ASCII 字符组成 题解 比较简单,建议直接AC 12345678910111213public static boolea...
找出字符串中第一个匹配项的下标
找出字符串中第一个匹配项的下标 题目详解28. 找出字符串中第一个匹配项的下标 给你两个字符串 haystack 和 needle ,请你在 haystack 字符串中找出 needle 字符串的第一个匹配项的下标(下标从 0 开始)。如果 needle 不是 haystack 的一部分,则返回 -1 。 示例 1: 输入:haystack = “sadbutsad”, needle = “sad”输出:0解释:”sad” 在下标 0 和 6 处匹配。第一个匹配项的下标是 0 ,所以返回 0 。 示例 2: 输入:haystack = “leetcode”, needle = “leeto”输出:-1解释:”leeto” 没有在 “leetcode” 中出现,所以返回 -1 。 提示: 1 <= haystack.length, needle.length <= 104 haystack 和 needle 仅由小写英文字符组成 题解暴力求解发12345678910111213141516171819...
面试经典-Z字形变换
Z字形变换题目详解Z 字形变换 将一个给定字符串 s 根据给定的行数 numRows ,以从上往下、从左到右进行 Z 字形排列。 比如输入字符串为 "PAYPALISHIRING" 行数为 3 时,排列如下: P A H NA P L S I I GY I R 之后,你的输出需要从左往右逐行读取,产生出一个新的字符串,比如:"PAHNAPLSIIGYIR"。 请你实现这个将字符串进行指定行数变换的函数: string convert(string s, int numRows); 示例 1: 输入:s = “PAYPALISHIRING”, numRows = 3输出:”PAHNAPLSIIGYIR” 示例 2: 输入:s = “PAYPALISHIRING”, numRows = 4输出:”PINALSIGYAHRPI”解释:P I NA L S I GY A H RP I 示例 3: 输入:s = “A”, numR...
面试经典-反转字符串中的单词
反转字符串中的单词题目详情反转字符串中的单词 给你一个字符串 s ,请你反转字符串中 单词 的顺序。 单词 是由非空格字符组成的字符串。s 中使用至少一个空格将字符串中的 单词 分隔开。 返回 单词 顺序颠倒且 单词 之间用单个空格连接的结果字符串。 注意:输入字符串 s中可能会存在前导空格、尾随空格或者单词间的多个空格。返回的结果字符串中,单词间应当仅用单个空格分隔,且不包含任何额外的空格。 示例 1: 输入:s = “the sky is blue”输出:”blue is sky the” 示例 2: 输入:s = “ hello world “输出:”world hello”解释:反转后的字符串中不能存在前导空格和尾随空格。 示例 3: 输入:s = “a good example”输出:”example good a”解释:如果两个单词间有多余的空格,反转后的字符串需要将单词间的空格减少到仅有一个。 提示: 1 <= s.length <= 104 s 包含英文大小写字母、数字和空格 ' '...
面试经典-最长公共前缀
最长公共前缀题目详情最长公共前缀 编写一个函数来查找字符串数组中的最长公共前缀。 如果不存在公共前缀,返回空字符串""。 示例 1: 输入:strs = [“flower”,”flow”,”flight”]输出:”fl” 示例 2: 输入:strs = [“dog”,”racecar”,”car”]输出:””解释:输入不存在公共前缀。 提示: 1 <= strs.length <= 200 0 <= strs[i].length <= 200 strs[i] 仅由小写英文字母组成 题解 此题主要理解题干中的公共前缀, 例如 “flower”,”flow”,”flight” 最长公共前缀为 “fl” “bflower”, “afow”, “bflight” 就没有最长公共前缀 ,最长公共前缀为 “” 理解到这一层,此题也就迎刃而解了。 123456789101112131415161718192021222324252627class Solution { public...
最后一个单词的长度
最后一个单词的长度题目详情58. 最后一个单词的长度 给你一个字符串 s,由若干单词组成,单词前后用一些空格字符隔开。返回字符串中 最后一个 单词的长度。 单词 是指仅由字母组成、不包含任何空格字符的最大子字符串。 示例 1: 输入:s = “Hello World”输出:5解释:最后一个单词是“World”,长度为 5。 示例 2: 输入:s = “ fly me to the moon “输出:4解释:最后一个单词是“moon”,长度为 4。 示例 3: 输入:s = “luffy is still joyboy”输出:6解释:最后一个单词是长度为 6 的“joyboy”。 提示: 1 <= s.length <= 104 s 仅有英文字母和空格 ' ' 组成 s 中至少存在一个单词 题解此题比较简单,建议自己动手 123456789101112public static int lengthOfLastWord(String s) { String trim = s....
面试经典-整数转罗马数字
整数转罗马数字题目整数转罗马数字 七个不同的符号代表罗马数字,其值如下: 符号 值 I 1 V 5 X 10 L 50 C 100 D 500 M 1000 罗马数字是通过添加从最高到最低的小数位值的转换而形成的。将小数位值转换为罗马数字有以下规则: 如果该值不是以 4 或 9 开头,请选择可以从输入中减去的最大值的符号,将该符号附加到结果,减去其值,然后将其余部分转换为罗马数字。 如果该值以 4 或 9 开头,使用 减法形式,表示从以下符号中减去一个符号,例如 4 是 5 (V) 减 1 (I): IV ,9 是 10 (X) 减 1 (I):IX。仅使用以下减法形式:4 (IV),9 (IX),40 (XL),90 (XC),400 (CD) 和 900 (CM)。 只有 10 的次方(I, X, C, M)最多可以连续附加 3 次以代表 10 的倍数。你不能多次附加 5 (V),50 (L) 或 500 (D)。如果需要将符号附加4次,请使用 减法形式。 给定一个整数,将其转换为罗马数字。 示例 1: 输入:num =...
面试经典-罗马数字转数字
罗马数字转整数题目详情 罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。 字符 数值I 1V 5X 10L 50C 100D 500M 1000 例如, 罗马数字 2 写做 II ,即为两个并列的 1 。12 写做 XII ,即为 X + II 。 27 写做 XXVII, 即为 XX + V + II 。 通常情况下,罗马数字中小的数字在大的数字的右边。但也存在特例,例如 4 不写做 IIII,而是 IV。数字 1 在数字 5 的左边,所表示的数等于大数 5 减小数 1 得到的数值 4 。同样地,数字 9 表示为 IX。这个特殊的规则只适用于以下六种情况: I 可以放在 V (5) 和 X (10) 的左边,来表示 4 和 9。 X 可以放在 L (50) 和 C (100) 的左边,来表示 40 和 90。 C 可以放在 D (500) 和 M (1000) 的左边,...
