718重复字串
题目
http://www.lintcode.com/zh-cn/problem/repeat-string/
写一个方法, 给一个由 N 个字符构成的字符串 A和一个由 M 个字符构成的字符串 B, 返回 A 必须重复的次数,使得 B 是重复字符串的子串.如果 B 不可能为重复字符串的子串, 则返回 -1.
注意事项
假设 1 <= N, M <= 1000
样例
给出 A = abcd, B = cdabcdab
你的方法需要返回 3, 因为在重复字符串 A 3次之后我们得到了字串 abcdabcdabcd. 字符串B是这个字符串的一个子串.
思路
- python内的字符串直接用x in y:就可以直接判断x是否在字符串y内。
- 根据1 <= N, M <= 1000,只要复制到1001次,则大致可知是否能存在重复字符串
代码
class Solution:
"""
@param: : string A to be repeated
@param: : string B
@return: the minimum number of times A has to be repeated
"""
def repeatedString(self, A, B):
# write your code here
c_num = 1
jia = A
while B not in A:
A = A +jia
c_num +=1
if c_num >1000:
return -1
return c_num
706二进制时间
题目
http://www.lintcode.com/zh-cn/problem/binary-time/
给了一个二进制显示时间的手表和一个非负整数 n, n 代表在给定时间表上 1 的数量, 返回所有可能的时间
注意事项
输出的顺序没有要求.
小时不能包含前导零, 比如 “01:00” 是不允许的, 应该为 “1:00”.
分钟必须由两位数组成, 可能包含前导零, 比如 “10:2” 是无效的, 应该为 “10:02”.
样例
给出 n = 1
返回 [“1:00”, “2:00”, “4:00”, “8:00”, “0:01”, “0:02”, “0:04”, “0:08”, “0:16”, “0:32”]
思路
- 用一个字典存放所以的小时(0-11)和分钟(0-59)所需要表示成二进制需要的1的数量。
我们知:二进制与10进制关系
64 32 16 8 4 2 1
1 1 1 1 1 1 1
其中字典的建立有规律性
10进制:0 1 2 3 4 5 6 7
二进制:0 1 1 2 1 2 2 3
10进制:8 9 10 11 12 13 14 15
二进展:1 2 2 3 2 3 3 4
其实9-15就是8去加前面十进制(0-7)需要的二进制数
9 =8+1 =1+1=2
10=8+2 =1+1=2
11=8+3 =1+2=3
......
后面的都类同17-31 =>16+
33-60 =>32+
- 其实也可以使用十进制转为二进制所要的1数量来建立字典,只是一开始想的是上面这个规律来建。
- 根据所给的n(1的数量),先循环小时,减去所需的1的数量,剩下的1在分钟里面找,其中需要判断分钟是否小于10的,小于10的需要前置0.
代码
class Solution:
"""
@param: : the number of "1"s on a given timetable
@return: all possible time
"""
def binaryTime(self, n):
# Write your code here
dict1 ={'0':0,'1':1,'2':1,'3':2,'4':1,'5':2,'6':2,'7':3}
for i in range(8,12):
dict1[str(i)]=dict1[str(i-8)]+1
#dict2复制0-11小时
dict2 = dict1.copy()
#dict1是0-59分钟
for i in range(12,16):
dict1[str(i)]=dict1[str(i-8)]+1
for i in range(16,32):
dict1[str(i)]=dict1[str(i-16)]+1
for i in range(32,60):
dict1[str(i)]=dict1[str(i-32)]+1
result = []
for i in dict2:
res=''
#小时
if dict2[i]<=n:
res=res+i+':'
#分钟
for j in dict1 :
if (n-dict2[i]) == dict1[j]:
#小于10的需要补充前置0
if int(j)<10:
result.append(res+'0'+j)
else:
result.append(res+j)
return result