- 博客(54)
- 资源 (1)
- 问答 (1)
- 收藏
- 关注
原创 字符串问题---字典树(前缀树)的实现
【题目】 字典树又称为前缀树或者Trie树,是处理字符串常用的数据结构。假设组成所有单词的字符仅是‘a’~‘z’,请实现字典树的结构,并包含以下四个主要的功能。void insert(String word):添加word,可重复添加void delete(String word):删除word,如果word添加过多次,仅删除一次boolean search(String word):查询w
2017-08-31 23:30:33 1310
原创 字符串问题---回文最小分割数
【题目】 给定一个字符串str,返回把str全部切成回文子串的最小分割数。【举例】 str = “ABA”,str本身就是回文串,返回0. str = “ACDCDCDAD”,最少需要切两次变成3个回文子串,所以返回2.【基本思路】 本题是一个经典的动态规划的题目。定义动态规划数组dp,dp[i]的含义是子串str[0…i]至少需要切割几次,才能把str[0…i]全部切成回文子串。那么d
2017-08-27 13:21:06 3033 1
原创 字符串问题---最小包含子串的长度
【题目】 给定字符串str1和str2,求str1的子串中含有str2所有字符的最小子串长度。【举例】 str1 = “aabcde”, str2 = “ca”。返回3. str1 = “12345”, str2 = “344”。返回0.【基本思路】 使用一个哈希表记录str2中每一个字符出现的次数。需要四个变量:left,right表示str1子串str1[left…right]的两边
2017-08-26 03:36:21 4272 1
原创 字符串问题---找到被指的新类型字符
【题目】 新类型的字符定义如下:新类型字符是长度为1或2的字符串表现形式可以仅是小写字母,也可以是大写字母+小写字母,也可以是大写字母+大写字母。例如,a,Bc,DD都是符合条件的新类型字符。现在给定一个字符串str,str一定是若干新类型字符正确组合的结果。比如“eaCCBi”,由新类型字符“e”,“a”,“CC”,“Bi”拼成。再给定一个整数k,代表str中的位置。请返回被k位置指中的新类
2017-08-23 21:42:04 563
原创 Python判断字符串与大小写转换
判断字符串s.isalnum() #所有字符都是数字或者字母s.isalpha() #所有字符都是字母s.isdigit() #所有字符都是数字s.islower() #所有字符都是小写s.isupper() #所有字符都是大写s.istitle() #所有单词都是首字母大写,像标题s.isspace() #所有字符都是空白字符、\t、\n大小
2017-08-23 21:09:11 1566
原创 字符串问题---找到字符串的最长无重复字符子串
【题目】 给定一个字符串str,返回str中最长无重复字符子串的长度。【举例】 str = “abcd”,返回4。 str = “aabcb”,返回3。【基本思路】 如果str的长度为N,字符的编码范围为M,本题可以做到时间复杂度为O(N),空间复杂度O(M)。具体方法如下:在遍历str之前,先申请几个变量。哈希表map,key表示某个字符,value为这个字符最近出现的位置。整型变量
2017-08-23 20:32:25 849
原创 字符串问题---拼接所有字符串产生字典顺序最小的大字符串
【问题】 给定一个字符串类型的数组strs,请找到一种拼接顺序,使得将所有的字符串拼接起来组成的大字符串是所有可能性中字典顺序最小的,并返回这个大字符串。【举例】 strs = [“abc”, “de”],可以拼接成 “abcde”,也可以拼接成 “deabc”,但前者的字典顺序更小,所以返回 “abcde” strs = [“b”, “ba”],可以拼成 “bba”,也可以...
2017-08-23 01:21:47 2661
原创 python2/3---sort方法与sorted函数的使用
Python list内置sort()方法用来排序,也可以用python内置的全局sorted()方法来对可迭代的序列排序生成新的序列。 一、基本形式列表有自己的sort方法,其对列表进行原址排序,既然是原址排序,那显然元组不可能拥有这种方法,因为元组是不可修改的。另一种获取已排序的列表副本的方法是使用sorted函数:二、可选参数1.cmp。可以定义自己的比较函数,然后通过参数传递给so
2017-08-23 01:04:20 8264
原创 字符串问题---0左边必有1的二进制字符串数量
【问题】 给定一个整数N,求由‘0’字符和‘1’字符组成的长度为N的所有字符串中,满足‘0’字符的左边必有‘1’字符的字符串数量。【举例】 N = 1。只由‘0’和‘1’组成,长度为1的所有字符串:“0”、“1”。只有字符串“1”满足要求,返回1。 N = 2。只由‘0’和‘1’组成,长度为2的所有字符串:“00”,“01”,“10”,“11”。只有字符串“10”,“11”满足,返回2。
2017-08-22 20:16:22 2124
原创 字符串问题---公式字符串求值
【题目】 给定一个字符串str,str表示一个公式,公式里可能有整数,加减乘除符号和左右括号,返回公式计算的结果。例如,str = 48×((70-65)-43)+8×1。返回-1816。【说明】可以认定给定的字符串一定是正确的公式,不需要对str做公式有效性检查。如果是负数就需要有括号括起来,比如4*(-3)。但如果负数作为公式的开头或者括号部分的开头,则可以没有括号,比如-3*4和(-3*
2017-08-21 22:14:03 3527
原创 字符串问题---括号字符串的有效性和最长有效长度
【题目】给定一个字符串str,判断是不是整体有效的括号字符串。例如,str = “()()()”,返回True,str = “())” 或 “()a()”,返回False。【补充题目】给定一个括号字符串,返回最长的有效字符串。【基本思路】原问题。判断过程如下:从左到右遍历str,判断每一个字符是否是括号,如果不是,直接返回False。遍历过程中,检查目前位置 ‘(‘和 ‘)’的数量,如果 ‘)’
2017-08-21 15:09:28 1922
原创 字符串问题---添加最少字符使字符串整体都是回文字符串
【题目】 给定一个字符串str,如果可以在str的任意位置添加字符,请返回在添加字符最少的情况下,让str整体都是回文字符串的结果。【进阶题目】 给定一个字符串str,再给定str的最长回文子序列字符串strlps,请返回在添加字符最少的情况下,让str整体都是回文字符串的一种结果。进阶问题比原问题多了一个参数,请做到时间复杂度比原问题的实现低。【基本思路】 原问题。首先考虑,如果可以在str
2017-08-21 09:10:54 3506
原创 字符串问题---数组中两个字符串的最小距离
【题目】 给定一个字符串数组strs,再给定两个字符串str1和str2,返回strs中str1与str2的最小距离,如果str1或str2为null,或不在strs中,返回-1。【基本思路】 从左到右遍历strs,用变量last1记录最近一次出现的str1的位置,用变量last2记录最近一次出现str2的位置。如果遍历到str1,那么i - last2就是当前的str1和左边离它最近的str2
2017-08-19 18:59:39 1010
原创 字符串问题---翻转字符串
【题目】 给定一个字符类型的数组chas,请在单词间做逆序调整,只要做到单词顺序逆序即可,对空格的位置没有特别要求。例如把chas看成字符串为“I love you”,调整成“you love I”。【补充题目】 给定一个字符类型的数组chas和一个整数size,请把大小为size的左半区整体移到右半区,右半区整体移到左边。例如,如果把chas看作字符串“ABCDE”,size = 3,调整成“
2017-08-19 18:11:21 1374
原创 字符串问题---字符串的调整与替换
【题目】 给定一个字符类型的数组chas[],chas的右半区全是空字符,左半区不含有空字符。现在想将左半区中所有的空格字符替换成“%20”,假设chas的右半区足够大,可以满足替换所需要的空间,请完成替换函数。要求时间复杂度O(N),空间复杂度O(1)。【补充题目】 给定一个字符类型的数组chas[],其中只含有数字字符和‘ * ’字符。现在想将所有的 ‘ * ’字符都放在chas的左边,数字
2017-08-19 12:09:56 2068 1
原创 字符串问题---在有序但含有空的数组中查找字符串
【题目】 给定一个字符串数组strs[],在strs中有些位置为null,但在不为null的位置上,其字符串是按照字典顺序从小到大依次出现的。再给定一个字符串str,请返回str在strs中出现最左的位置。【基本思路】 因为字符串是有顺序的,所以可以使用二分查找,只要注意处理null位置就行。并且注意所求的是最左的位置,所以找到一个str的位置还要再考虑数组中是否还有更左的str。下面是使用py
2017-08-18 22:39:50 715
原创 字符串问题---判断字符数组中是否所有的字符只出现了一次
【题目】 给定一个字符类型数组chas,判断chas中是否所有的字符都只出现过一次。【基本思路】 一.时间复杂度为O(N)的算法。 使用哈希表,记录每个字符出现的频数,如果发现字符的频数不为1,直接返回False。 二.时间复杂度为O(NlogN),空间复杂度为O(1)的算法。 1.先将数组排序,再判断当前字符是否等于前一个字符即可。 2.关键使用什么
2017-08-18 22:31:09 1471
原创 字符串问题---字符串的统计字符串
【题目】 给定一个字符串str,返回str的统计字符串。例如,“aaabbadddffc”的统计字符串为“a_3_b_2_1_d_3_f_2_c_1”。【补充题目】 给定一个字符串的统计字符串cstr,再给定一个整数index,返回cstr所代表的原始字符串上第index个字符。例如,”a_1_b_100”所代表的原始字符串上第0个字符是‘a’,第50个字符是‘b’。【基本思路】 原问题。从左
2017-08-18 22:21:53 1285
原创 字符串问题---替换字符串中连续出现的指定字符串
【题目】 给定三个字符串str,from和to,已知from字符串中没有重复字符,把str中所有from的子串全部替换成to字符串,对连续出现from的部分要求只替换一个to字符串,返回最终的结果字符串。【举例】 str = “123abc”,from = “abc”,to = “4567”,返回“1234567”。 str = “123”,from = “abc”,to = “4567”
2017-08-18 21:44:41 709
原创 字符串问题---将整数字符串转成整数型
【题目】 给定一个字符串str,如果str符合日常书写的整数形式,并且属于32位整数的范围,返回str所代表的整数值,否则返回0。【举例】 str = “123”,返回123。 str = “023”,因为不符合日常的书写习惯,返回0。 str = “A123”,返回0。 str = “2147483647”,返回2147482647 str = “2147483648”
2017-08-18 21:19:21 1919
原创 字符串问题---判断两个字符串是否互为旋转词
【题目】 如果一个字符str,把字符str前面任意的部分挪到后面形成的字符叫做str的旋转词。比如str = “12345”,str的旋转词有 “12345”, “23451”, “34512”, “45123”和“51234”。给定两个字符串a和b,请判断a和b是否互为旋转词。基本思路如果a和b的长度不一样,直接返回False。生成一个大字符串c,c是两个字符串a拼在一起的结果,即c = a
2017-08-17 23:46:27 1608
原创 字符串问题---去掉字符串中连续出现k个0的子串
【题目】 给定一个字符串str和一个整数k,如果str中刚好有连续的k个‘0’字符出现时,把k个连续的‘0’字符删除,返回处理后的字符串。【举例】 str = “A00B”,k = 2,返回 “AB”。 str = “A0000B000”,k = 3,返回 “A0000B”。【基本思路】使用两个变量count和start。count表示目前出现的连续‘0’的个数,start表示连
2017-08-17 00:27:03 941
原创 字符串问题---字符串中数字子串的求和
【题目】 给定一个字符串str,求其中全部数字串所代表的数字之和。要求如下:忽略小数点字符,例如“A1.3”,其中包含两个数字1和3.如果紧贴数字子串的左侧出现字符“-”,当连续出现的数量为奇数时,则数字视为负,连续出现的数量为偶数时,则数字视为正。例如,“A-1BC–12”,其中包含数字-1和12。【举例】 str = “A1CD2E33”返回36. str = “A-1B
2017-08-17 00:01:00 3551
原创 字符串问题---判断两个字符串是否为变形词
【问题】 给定两个字符串str1和str2,如果str1和str2中出现的字符种类一样并且每种字符出现的次数也一样,那么str1与str2互为变形词。请实现函数判断两个字符串是否互为变形词。【举例】 str1 = “123”,str2 = “231”,返回True str1 = “123”,str2 = “2331”,返回False【基本思路】如果两个字符串的长度不相同,直接返回
2017-08-16 23:21:35 1390
原创 递归与动态规划---N皇后问题的递归方法和位运算方法
问题: N皇后问题是指在N×N的棋盘上要摆N个皇后,要求任何两个皇后不同行、不同列,也不在同一条斜线上。给定一个整数N,返回N个皇后的摆法有多少种。基本思路:1.递归方法。如果在位置(i,j)放置了一个皇后,那么那些位置就不能在放置皇后了呢?整个 i 行都不能放置整个 j 行都不能放置如果位置(a,b)满足 |a - i| = |b - j|,说明(a,b)与(i,j)处在同一条斜线上,也不
2017-08-15 21:30:52 881
原创 递归与动态规划---数组中的最长连续序列
问题: 给定无序数组,返回其中最长的连续序列的长度。举例: arr = [100, 4, 200, 1, 3, 2],最长的连续序列为[1, 2, 3, 4],所以返回4。基本思路: 利用哈希表可以实现时间、空间复杂度都为O(N)的方法。具体过程如下:生成哈希表map,key表示遍历过的某个数,value代表key这个数所在的最长连续序列的长度。从左到右依次遍历数组,假设遍历到ar
2017-08-15 20:30:45 988
原创 递归与动态规划---跳跃游戏
题目: 给定数组arr,arr[i] == k代表可以从位置i向右跳1~k个距离。比如,arr[2] == 3,代表从位置2可以跳到位置3、位置4或者位置5。如果从位置0出发,返回最少跳几次能跳到arr最后的位置上。举例: arr = [3, 2, 3, 1, 1, 4] arr[0] = 3,选择跳到位置2;arr[2] == 3,可以跳到最后的位置,所以返回2。基本思路:1.使
2017-08-15 20:04:22 813
原创 递归与动态规划---排成一条线的纸牌博弈问题
问题: 给定一个整型数组arr,代表数值不同的纸牌排成一条线。玩家A和玩家B依次拿走每张纸牌,规定玩家A先拿,玩家B后拿,但是每个玩家每次只能拿走最左边或者最右边的一张牌,最后所拿牌累加和最大的玩家获胜,玩家A和玩家B都绝顶聪明。请返回最后获胜者的分数。举例: arr = [1, 2, 100, 4] 玩家A先拿1,玩家B拿4,玩家A再拿100,玩家B再拿2,游戏结束,玩家A获胜,
2017-08-15 19:01:33 945 1
原创 递归与动态规划---数字字符串转换为字母组合的种数
问题: 给定一个字符串str,str全部由数字字符组成,如果str中某一个或者某相邻两个字符组成的子串在1~26之间,则这个子串可以转换为一个字母。规定“1”转换为“A”,“2”转换为“B”……“26”转换为“Z”。求str有多少种不同的转换结果。举例: str = “1111” 能转换成的结果有“AAAA”,“LAA”,“ALA”,“AAL”和“LL”,返回5。 str =
2017-08-15 13:35:02 1714
原创 递归与动态规划---龙与地下城游戏问题
问题: 给定一个二维数组map,含义是一张地图,例如如下,矩阵: -2 -3 3 -5 -10 1 0 30 -5 游戏规则如下:骑士从左上角出发,每次只能向右或者向下走,最后到达右下角见到公主。地图中每个位置的只代表骑士要遭遇的事。如果是负数,表示此处有怪兽,要让骑士损失血量。如果是非负数,表示此处有血瓶,能让骑士回血。骑士从左上角到右下角的过程,走到
2017-08-15 13:08:02 2054
原创 递归与动态规划---字符串的交错组成
问题: 给定三个字符串str1, str2和aim, 如果aim包含且仅包含str1和str2的所有字符,而且在aim中属于str1的字符之间保持原来在str1中的顺序,属于str2的字符之间保持原来在str2中的顺序,那么称aim是str1和str2的交错组成。实现一个函数,判断aim是否是str1和str2的交错组成。举例: str1 = “AB”, str2 = “12”。那么”A
2017-08-14 02:07:45 657
原创 递归与动态规划---最小编辑代价
问题: 给定两个字符str1和str2,再给定三个整数ic,dc,rc,分别代表插入,删除和替换一个字符的代价,返回将str1编辑成str2的最小代价。举例: str1 = “abc”,str2 = “adc”,ic = 5,dc = 3,rc = 100。 从str1编辑到str2,先删除’b’,然后插入’d’是代价最小的,所以返回8。基本思路: 如果str1的长度为N,str2的长度为M
2017-08-14 01:34:31 1525
原创 递归与动态规划---最长公共子串问题
问题: 给定两个字符串str1和str2,返回两个字符串的最长公共子串。举例: str1 = “1AB2345CD”,str2 = “12345EF”,返回”2345”。基本思路: 假设str1的长度为N,str2的长度为M,生成N×M的矩阵dp,dp[i][j]的含义是必须以str1[i]和str2[j]结尾的最长公共子串的长度,dp[i][j]的计算方法如下:矩阵的第一行。如果s
2017-08-13 22:52:03 1515
原创 递归与动态规划---最长公共子序列问题
问题: 给定两个字符串str1和str2,返回两个字符串的最长公共子序列。举例: str1 = “1A2C3D4B56”,str2 = “B1D23CA45B6A”. “123456”或者”12C4B6”都是最长公共子序列,返回哪一个都行基本思路: 如果str1和str2的长度分别为N,M,生成N×M的矩阵dp,dp[i][j]的含义是str1[0…i]与str2[0…j]的最长公共子序列,
2017-08-13 20:55:21 1237
原创 递归与动态规划---汉诺塔问题
问题: 给定一个整数n,代表汉诺塔游戏中从小到大放置的n个圆盘,假设开始时所有的圆盘都放在左边的柱子上,想按照汉诺塔游戏的要求把所有的圆盘都移到右边的柱子上,实现函数打印最优移动轨迹。 举例: n = 2时,打印: move from left to mid move from left to right move from mid to right 基本思路:
2017-08-13 20:26:55 2349
原创 递归与动态规划---最长递增子序列问题
问题: 给定数组arr,返回arr的最长递增子序列基本思路: 首先介绍时间复杂度为O(N^2)的方法。具体过程如下:生成长度为N(arr的长度)的数组dp,dp[i]表示在以arr[i]结尾的情况下,arr[0…i]中的最长子序列。dp[0]表示以arr[0]结尾的情况下最长子序列,只有它自己,设为1对于dp的其他位置,从左到右依次遍历,假设遍历到i,首先在arr[0…i-1]中找到比
2017-08-13 00:03:45 4839
原创 递归与动态规划---换钱的方法数
问题: 给定数组arr,arr中所有的值都为整数且不重复。每个值代表一种面值的货币,每种货币有无数张,再给定一个整数aim代表要找的钱数,求换钱的方法有多少种。 基本思路: 这道题的经典之处在于它可以体现暴力递归、记忆搜索、动态规划之间的关系,并可以在动态规划的基础上再进行一次优化。 首先介绍暴力递归的方法。如果arr = [5, 10, 25, 1],aim = 1000,分析过程如
2017-08-12 16:55:35 1953
原创 递归与动态规划---换钱的最少货币数(每种货币只有一张)
题目: 给定一个数组arr,arr中所有的值都为正数且不重复,每个值代表一种面值的货币,每种面值的货币只有一张,再给定一个整数aim代表要找的钱数,求组成aim的最少货币数。 基本思路: 生成dp数组,数组的每一行和每一列可以先确定,其他的位置dp[i][j] = min(dp[i-1][j], dp[i-1][j-arr[i]]+1)#python3.5#经典动态规划实现def
2017-08-12 00:18:12 831
原创 递归与动态规划---换钱的最少货币数(每种货币有无数张)
题目: 给定一个数组arr,arr中所有的值都为正数且不重复,每个值代表一种面值的货币,每种面值的货币有无数张,再给定一个整数aim代表要找的钱数,求组成aim的最少货币数。 基本思路: 生成dp数组,数组的每一行和每一列可以先确定,其他的位置dp[i][j] = min(dp[i-1][j], dp[i][j-arr[i]]+1)#python3.5#经典动态规划实现def mi
2017-08-12 00:15:12 3297 1
原创 递归与动态规划---矩阵的最小路径和
【题目】 给定一个矩阵m,从左上角开始每次都只能向下或者向右走,最后到达右下角的位置,路径上所有的数字累加起来就是路径和,返回所有路径中最小的路径和。【基本思路】 生成和m同样大小的矩阵dp,dp[i][j]的值表示从左上角走到位置(i, j)的最小路径和,矩阵的第一行和第一列的值可以先确定,其他的位置dp[i][j]的值等于min(dp[i-1][j], dp[i][j-1...
2017-08-12 00:06:58 1001
C语言常见的问题集
2018-05-22
python3 range()怎么倒着取数并且得到0值
2017-07-18
TA创建的收藏夹 TA关注的收藏夹
TA关注的人