• 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
  • 相关阅读:
    Oracle中查询表中数据的上次更新时间
    数据库分区 分库 分表 分片(转)
    beanFactory和factoryBean的区别(转)
    TCP三次握手形象理解
    深拷贝,浅拷贝(转)
    真的要去做
    '庞然大物'是怎么来的?为何有的技术明明看了很多遍依然不能很好的理解
    java6大原则之单一职责原则,里式替换原则
    状态不好记录一下
    java继承,多态
  • 原文地址:https://www.cnblogs.com/codeinpy/p/9338766.html
Copyright © 2020-2023  润新知