python_day_4:20180719
804. 唯一摩尔斯密码词
为了方便,所有26个英文字母对应摩尔斯密码表如下:
[".-","-...","-.-.","-..",".","..-.","--.","....","..",".---","-.-",".-..","--","-.","---",".--.","--.-",".-.","...","-","..-","...-",".--","-..-","-.--","--.."]
给定一个单词列表,每个单词可以写成每个字母对应摩尔斯密码的组合。例如,"cab" 可以写成 "-.-.-....-",(即 "-.-." + "-..." + ".-"字符串的结合)。我们将这样一个连接过程称作单词翻译。
返回我们可以获得所有词不同单词翻译的数量。
思路:这里是给出一串词语,需要把它们全部转化为摩斯码,然后数一数摩斯码有几种结构。有些单词拼法不一样但是转成摩斯码是一样的。那么首先写个函数用来进行摩斯码转换,然后调用它。
1 class Solution(object): 2 def uniqueMorseRepresentations(self, words): 3 """ 4 :type words: List[str] 5 :rtype: int 6 """ 7 collection=[] 8 for i in words: 9 thisone=self.mosi(i) 10 if thisone not in collection: 11 collection.append(thisone) 12 return len(collection) 13 14 def mosi(self,word): 15 mosima=[".-","-...","-.-.","-..",".","..-.","--.","....","..",".---","-.-",".-..","--","-.","---",".--.","--.-",".-.","...","-","..-","...-",".--","-..-","-.--","--.."] 16 zimubiao=[chr(i) for i in range(97,123)] 17 mosibiao=dict(zip(zimubiao,mosima)) 18 result='' 19 for i in word: 20 result+=mosibiao[i] 21 return result
476. 数字的补数
给定一个正整数,输出它的补数。补数是对该数的二进制表示取反。
注意:
-
给定的整数保证在32位带符号整数的范围内。
-
你可以假定二进制数不包含前导零位。
思路:第一步先把数字转成二进制,然后就是里面的0和1互换。想到找第三个值,这样只要用三次replace就可以把1和0换掉了。最后用int(number,2)方法把二进制数字转回十进制
1 class Solution(object): 2 def findComplement(self, num): 3 """ 4 :type num: int 5 :rtype: int 6 """ 7 binnum=str(bin(num)).replace('0b','') 8 binnum=binnum.replace('1','2') 9 binnum=binnum.replace('0','1') 10 binnum=binnum.replace('2','0') 11 return int(binnum,2)
821. 字符的最短距离
给定一个字符串 S 和一个字符 C。返回一个代表字符串 S 中每个字符到字符串 S 中的字符 C 的最短距离的数组。
示例 1:
输入: S = "loveleetcode", C = 'e'
输出: [3, 2, 1, 0, 1, 0, 0, 1, 2, 2, 1, 0]
说明:
-
字符串 S 的长度范围为 [1, 10000]。
-
C 是一个单字符,且保证是字符串 S 里的字符。
-
S 和 C 中的所有字母均为小写字母。
思路:用i遍历字符串,在每个i的位置,向左边找目标,向右边找目标,把两边找到的目标值比较一下,较小的那个放进result列表里面去,最后返回result。注意向左侧寻找目标时,用i左边的切片的反方向输出去找,若找到需要位置+1。这个细节要注意。
1 class Solution(object): 2 def shortestToChar(self, S, C): 3 """ 4 :type S: str 5 :type C: str 6 :rtype: List[int] 7 """ 8 result=[] 9 for i in range(len(S)): 10 left= S[:i][::-1].find(C) 11 right=S[i:].find(C) 12 if left<0:result.append(right) 13 elif right<0:result.append(left+1) 14 else:result.append(min(left+1,right)) 15 return result