一、题目
给定一个字符串 str,返回 str 中最长回文子串的长度
1 | str="123", 其中的最长回文子串为 "1"、"2" 或者 "3",所以返回 1 |
Leetcode:https://leetcode.cn/problems/longest-palindromic-substring/
二、分析
大名鼎鼎的 manacher 算法,就是用于此种类型的题目
给定一个字符串 str,返回 str 中最长回文子串的长度
1 | str="123", 其中的最长回文子串为 "1"、"2" 或者 "3",所以返回 1 |
Leetcode:https://leetcode.cn/problems/longest-palindromic-substring/
大名鼎鼎的 manacher 算法,就是用于此种类型的题目
写一个函数 StrToInt,实现把字符串转换成整数这个功能。不能使用 atoi 或者其他类似的库函数。
首先,该函数会根据需要丢弃无用的开头空格字符,直到寻找到第一个非空格的字符为止。
当我们寻找到的第一个非空字符为正或者负号时,则将该符号与之后面尽可能多的连续数字组合起来,作为该整数的正负号;假如第一个非空字符是数字,则直接将其与之后连续的数字字符组合起来,形成整数。
该字符串除了有效的整数部分之后也可能会存在多余的字符,这些字符可以被忽略,它们对于函数不应该造成影响。
注意:假如该字符串中的第一个非空格字符不是一个有效整数字符、字符串为空或字符串仅包含空白字符时,则你的函数不需要进行转换。
给定两个字符串 str1 和 str2,如果 str1 和 str2 中出现的字符种类一样且每种字符出现的次数也一样,那么 str1 和 str2 互为变形词。请实现函数判断两个字符串是否互为变形词
比如:
1 | str1 = "123", str2 = "231" 返回 true |
这道题目简单,首先判断两个字符串长度是否相等,如果不等,直接返回 false。然后用一个 map,key 为字符,value 为出现的次数,先遍历 str1,然后遇到 key,就给 value 自增。接下来,遍历 str2,遇到 key 就给 value 减减。
有一个字符串s,仅有数字组成,现在将字符串的删除n个字符,使得剩下的字符组成的数字最小,不能打乱字符的顺序。
1 | 输入样例: |
贪心算法求解。最优解是删除出现的第一个左边 大于 右边的数,因为删除之后高位减小;每次删除一个数,一共删除 n 次,留下的数总是当前最优解。
1 | class Solution { |
给定三个字符串 str、from 和 to,把 str 中所有 from 的子串全部替换成 to 字符串,对连续出现 from 的部分要求只替换成一个 to 字符串,返回最终的结果字符串
举例:
1 | str="abcabc123abcabc456abcabc" from="abc" to="X" 返回 "X123X456X" |
有很多思路,这里提供一种思路。先将字符串中出现 from 的地方全部赋值为 0,使用一个变量 match 为 from 的下标标识。遍历 str 字符串。同时比较 from 字符串,如果 str[i]
和 from[i]
相等,那就让 match 继续自增。直到到达 from 的最后位置,仍然相等的话,就将 str 这些位置替换为 0,长度为 from 的长度。如果在出现 str[i]
和 from[i]
不相等,那就让 match 为 0,继续遍历 str。
给定一个字符串 s
,请你找出其中不含有重复字符的 最长子串 的长度。
leetcode:https://leetcode.cn/problems/longest-substring-without-repeating-characters/
滑动窗口的思路,来一个滑动窗口,记录他的最左边和最右边。再来一个 set 记录元素是否出现过,
给定 n
个非负整数表示每个宽度为 1
的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。
Leetcode:https://leetcode.cn/problems/trapping-rain-water/
1 | 输入:height = [0,1,0,2,1,0,1,3,2,1,2,1] |
给定数组 arr,arr 中所有的值都为正数且不重复。每个值代表一种面值的货币,每种面值的货币可以使用任意张,再给定一个整数 aim 代表要找的钱数,求组成 aim 的最少货币数
举例:
1 | arr[5, 2, 3], aim=20 |
动态规划的思路。组成 aim 所需的最小货币数,可以展开成分别组成 0 - aim
所需的最小货币数。我们申请一个二维数组 dp。列代表 0 - aim
,行代表给的钱的面值。
给定一个未排序的整数数组 nums
,找出数字连续的最长序列(不要求序列元素在原数组中连续)的长度。
1 | 输入:nums = [100,4,200,1,3,2] |
Leetcode:https://leetcode.cn/problems/WhsWhI/
Leetcode:https://leetcode.cn/problems/longest-consecutive-sequence/