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. 数字的补数
给定一个正整数,输出它的补数。补数是对该数的二进制表示取反。
意:
  1. 给定的整数保证在32位带符号整数的范围内。
  2. 你可以假定二进制数不包含前导零位。
思路:第一步先把数字转成二进制,然后就是里面的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]
说明:
  1. 字符串 S 的长度范围为 [1, 10000]。
  2. C 是一个单字符,且保证是字符串 S 里的字符。
  3. 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

 

posted @ 2018-07-19 22:18  code_in_py  阅读(169)  评论(0编辑  收藏  举报