leetcode-字符串(一)

67. 二进制求和

bin(num):转成2进制
int(num,2):用2进制读取
class Solution:
    def addBinary(self, a: str, b: str) -> str:
        return bin(int(a,2) + int(b,2))[2:]

520. 检测大写字母

s.title():判断首字母大写
class Solution:
    def detectCapitalUse(self, word: str) -> bool:
        return word == word.upper() or word == word.lower() or word == word.title()

788. 旋转数字

class Solution:
    def rotatedDigits(self, N: int) -> int:
        res=0
        for i in range(1,N+1):
            s=str(i)
            if '3' in s or '4' in s or  '7'  in s :continue            
            if '2' in s or '5' in s or '6' in s or '9' in s:res+=1
        return res

824. 山羊拉丁文

1、首刷
class Solution:
    def toGoatLatin(self, S: str) -> str:
        res = S.split(' ')
        for i in range(len(res)):
            if res[i][0].lower() in 'aeiou':
                res[i] += 'ma'
                res[i] += 'a' * (i + 1)
                        
            else:
                res[i] += res[i][0]
                res[i] = res[i][1:]
                res[i] += 'ma'
                res[i] += 'a' * (i + 1)
        return ' '.join(res)
2、精简
class Solution:
    def toGoatLatin(self, S: str) -> str:
        res = S.split(' ')
        for i in range(len(res)):
            if res[i][0].lower() in 'aeiou':
                res[i] = res[i] + 'ma' + 'a' * (i + 1)
            else:
                res[i] = res[i][1:] + res[i][0] + 'ma' + 'a'*(i+1)
        return ' '.join(res)

13. 罗马数字转整数

class Solution:
    def romanToInt(self, s: str) -> int:
        a = [1, 4, 5,9 ,10, 40, 50, 90, 100,400, 500,900,1000]
        b= ['I', 'IV', 'V', 'IX', 'X', 'XL', 'L', 'XC', 'C','CD', 'D', 'CM', 'M']
        c = zip(b,a)
        dic = {}
        
        for i in c:
            dic[i[0]] = i[1]
        num = 0
        for i in s:
            num += dic[i]
        if 'IV' in s:
            num -= 2
        if 'IX' in s:
            num -= 2
        if 'XL' in s:
            num -= 20
        if 'XC' in s:
            num -= 20
        if 'CD' in s:
            num -= 200
        if 'CM' in s:
            num -= 200
            
        return num
class Solution:
    def romanToInt(self, s: str) -> int:
        num = 0
        s = s.replace('IV','Q')
        s = s.replace('IX','W')
        s = s.replace('XL','E')
        s = s.replace('XC','R')
        s = s.replace('CD','T')
        s = s.replace('CM','Y')
        dic = {}
        dic['I'] = 1
        dic['V'] = 5
        dic['X'] = 10
        dic['L'] = 50
        dic['C'] = 100
        dic['D'] = 500
        dic['M'] = 1000
        dic['Q'] = 4
        dic['W'] = 9
        dic['E'] = 40
        dic['R'] = 90
        dic['T'] = 400
        dic['Y'] = 900
        for i in s:
            if not i in dic:
                return False
            else:
                num += dic[i]
        return num

521. 最长特殊序列 Ⅰ

暴力
class Solution:
    def findLUSlength(self, a: str, b: str) -> int:
        if a == b:
            return -1
        else:
            arr = set()
            brr = set()
            for i in range(len(a) - 1):
                for j in range(i + 1,len(a) + 1):
                    arr.add(a[i:j])
            for i in range(len(b) - 1):
                for j in range(i + 1, len(b) + 1):
                    brr.add(b[i:j])
            c = arr & brr
            print(len(a), len(b), len(c))
            if c == a:
                return len(b)
            elif c == b:
                return len(a)
            else:
                ret = 0
                for i in arr:
                    if i not in c:
                        ret = max(len(i), ret)
                for i in brr:
                    if i not in c:
                        ret = max(len(i), ret)
                return ret
审题
class Solution:
    def findLUSlength(self, a: str, b: str) -> int:
        if a == b:
            return -1
        else: 
            return max(len(a), len(b))

929.独特的电子邮件地址

find
class Solution:
    def numUniqueEmails(self, emails: List[str]) -> int:
        res = set()
        for email in emails:
            name, domain = email.split('@')
            if '+' in email:
                name = name[:name.find('+')].replace('.', '')
            else:
                name = name.replace('.', '')
            res.add(name + '@' + domain)
            
        return len(res)
join
class Solution:
    def numUniqueEmails(self, emails: List[str]) -> int:
        res = set()
        for email in emails:
            if '+' in email:
                pre = email.split('+')[0]
            else: 
                pre = email.split('@')[0]
                
            pre = ''.join(pre.split('.'))
            pos = email.split('@')[-1]
            
            mail = pre + '@' + pos
            res.add(mail)
            
        return len(res)

557. 反转字符串中的单词 III

class Solution:
    def reverseWords(self, s: str) -> str:
        return ' '.join([i[::-1] for i in s.split(' ')])

344. 反转字符串

class Solution:
    def reverseString(self, s: List[str]) -> None:
        """
        Do not return anything, modify s in-place instead.
        """
        # for i in range(0,len(s)//2):
        #     j = len(s) - 1 - i
        #     s[i],s[j] = s[j], s[i]
        s.reverse()

657. 机器人能否返回原点

class Solution:
    def judgeCircle(self, moves: str) -> bool:
        return moves.count('L') == moves.count('R') and moves.count('U') == moves.count('D')

leetcode-804

class Solution:
    def uniqueMorseRepresentations(self, words: List[str]) -> int:
        letter = [chr(i) for i in range(ord('a'), ord('z') + 1)]
        code = [".-","-...","-.-.","-..",".","..-.","--.","....","..",".---","-.-",".-..","--","-.","---",".--.","--.-",".-.","...","-","..-","...-",".--","-..-","-.--","--.."]
        c = zip(letter, code)
        
        dic = {}
        res = []
        ret = set()
        for i in c:
            dic[i[0]] = i[1] 

        for word in words:     
            ret.add(''.join([dic.get(i) for i in word]))
        return len(ret)
        
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值