ByteDance

字节跳动推荐

挑战字符串

无重复字符的最长子串

给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。

示例 1:
输入: "abcabcbb"
输出: 3
解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。

示例 2:
输入: "bbbbb"
输出: 1
解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。
示例 3:

输入: "pwwkew"
输出: 3
解释: 因为无重复字符的最长子串是 "wke",所以其长度为 3。
     请注意,你的答案必须是 子串 的长度,"pwke" 是一个子序列,不是子串。

方法:从第一位开始,如果没有重复的元素,就加到字典中。如果碰到存在过的元素,则求出当前无重复元素个数与最大值之间的最大值(初始最大值为0),然后清空字典,从下一位开始继续判断,直到最后一位。如果最后一位循环结束没有重复的,则比较最后一次字典的大小与之前的最大值,返回最大值。

无重复字符的最长子串

编写一个函数来查找字符串数组中的最长公共前缀。 如果不存在公共前缀,返回空字符串 ""。

方法:这题相对简单,新建一个字典存放每个子串的相同位置的元素。从第一位开始,如果出现了的次数为子串个数,则该字符是共同前缀。如果遇到不等的,跳出循环,返回前面的字符串为子串。

字符串的排列

给定两个字符串 s1 和 s2,写一个函数来判断 s2 是否包含 s1 的排列。 换句话说,第一个字符串的排列之一是第二个字符串的子串。

方法:将s1的左右元素转化成字典,然后将s2的长度为s1的子串转化为字典,如果相等,则返回true。如果不等,删除字典中的最开始的元素,并将最后的后面的一个元素添加进来继续比较。如果遍历S2结束没有返回,则返回false。

字符串相乘

给定两个以字符串形式表示的非负整数 num1 和 num2,返回 num1 和 num2 的乘积,它们的乘积也表示为字符串形式。

方法: 由于数字长度为一百多个,所以即使能转化成数字相乘,就算是long long也是放不下的。所以只能采取手动相乘,通过乘法原理转化成各位数相乘之和,最后合并即可。

  • 创建一个数组,数组长度是两个数字长度之和。(因为m位数和n位数相乘,最大为m+n位数)

  • 然后对于结果中第n位的数,结果是所有索引之和为n的两数相乘的和,由于需要将索引为0的位置留给最高位进位,所以整体索引向右偏移一次。

  • 然后从末尾开始判断,如果超过10,表示有进位,保留各位数,将进位加到低一位上。

  • 最后判断索引为0的位置有没有进位,有的话加进去,没有的话不管。

  • 将每个位置的数字转化为字符加到结果字符串中。

翻转字符串里的单词

给定一个字符串,逐个翻转字符串中的每个单词。

方法:先将所有字符翻转,然后每遇到一个空格,翻转一次,如果最后一个不是空格,则最后一个单词未翻转,翻转一次。如果翻转结束最后一位是空格,则需要删除末尾的空格。注意erase函数的参数,第一个是索引,第二个是删除字符数量。

简化路径

给定一个文档 (Unix-style) 的完全路径,请进行路径简化。

方法: 路径可以按“/”来分段处理。首先将字符串中每个以"/"结尾的子串压入到一个向量中。如果最后一个路径后没有加"/",也压入向量中。然后对每个向量元素进行处理

  • 如果有路径名为"./"或者"/",则直接将该元素赋值为空,如果有路径名为"."(通常是结尾),也是一样的处理。

  • 如果有路径名为"../"或者".."(通常这个也是结尾),则往前回溯,如果遇到不为空的元素,将该元素和目前的路径名清空。(只能回溯到索引为1处,根目录不能清空)如果回溯完是根目录,则只清空目前路径名。

  • 然后将向量中所有非空元素加到结果字符串中。

  • 判断结尾字符是否为"/",如果是,则删除结尾的“/”。

  • 返回结果字符串。

复原IP地址

给定一个只包含数字的字符串,复原它并返回所有可能的 IP 地址格式。

方法:ip地址每一段范围是0-255,也就是1-3位数字,逐个循环判断。如果是有效IP,则压入向量中。

  • 判断是否有效的函数:首先看,每一段地址长度是否大于1,如果大于1,且开头是0的IP属于无效IP直接返回false。然后将IP转为长整型(最大可能有10位),然后看每一位范围是否大于255,如果大于直接返回false。循环结束,返回true。

  • 标准化输出结果,将IP写为数字加'.'的形式输出。

三数之和

给定一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?找出所有满足条件且不重复的三元组。 注意:答案中不可以包含重复的三元组。

Last updated

Was this helpful?