【Python】LeetCode算法_字符串

387. 字符串中的第一个唯一字符

给定一个字符串,找到它的第一个不重复的字符,并返回它的索引。如果不存在,则返回 -1。

案例:

s = “leetcode”
返回 0.

s = “loveleetcode”,
返回 2.

注意事项:可以假定该字符串只包含小写字母。

思路一:string模块

import string

class Solution:
    def firstUniqChar(self, s):
        """
        :type s: str
        :rtype: int
        """
        letters = string.ascii_lowercase
        index = [s.index(l) for l in letters if s.count(l) == 1]
        return min(index) if len(index) else -1

思路二:set

class Solution:
    def firstUniqChar(self, s):
		return min([s.index(l) for l in set(s) if s.count(l) == 1] or [-1])

复杂度分析:空间复杂度O(1),时间复杂度O(n)。

汇总:string模块常用

string.ascii_uppercase  所有大写字母
string.ascii_lowercase 	所有小写字母
string.ascii_letters  	所有字母
string.digits  			所有数字

汇总:字符串大小写

name = 'ada'
name.title()		首字母大写	→ 'Ada'
name.upper()		转换为大写	→ 'ADA'
name.lower()		转换为小写	→ 'ada'

7. 整数反转

任意整数每位的数字倒转,如:-1230 输出 -321

假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为 [−231, 231 − 1]。请根据这个假设,如果反转后整数溢出那么就返回 0。

思路:将数字转成字符串后利用列表功能进行倒转,注意0和负号的特殊处理。

重点:列表顺序相反操作 x[len(x)-1::-1],从最左到第len(x)项倒转,如x = [-1230], len(x) - 1 = 4, x[4::-1] = [0321-]

def reverse(x):
    """
    :type x: int
    """
    if x == 0:
        return 0
    else:
        str_x = str(x)
        x = ''
        if str_x[0] == '-':
            x += '-'
        x += str_x[len(str_x)-1::-1].lstrip("0").rstrip("-")
        x = int(x)
        if -2**31 <= x <= 2**31-1:
            return x
        else:
            return 0

汇总:截取字符串(切片)

str = '012345'
str[0:3]	截取前3位字符				→ '012'
str[:]		截取字符串的全部字符		→ '012345'
str[3:]		截取第4个字符到结尾		→ '345'
str[:-2]	截取从头开始到倒数第2个字符之前	→ '0123'
str[2]		截取第三个字符			→ '2'
str[-1]		截取倒数第一个字符			→ '5'
str[::-1] 	创造一个与原字符串顺序相反的字符串	→ '543210'
str[-3:-1]	截取倒数第三位与倒数第一位之前的字符	→ '34' (含左不含右)
str[-3:]	截取倒数三位		→ '345'
str[:-5:-3]	逆序截取			→ '52'
str[:-5:-1]	逆序截取			→ '5432'

汇总:删除空格和换行符(暂时删除,不更改变量值)

s = ' string '
s.strip()  		删除空格和换行符			→ 'string'
s.strip('in')  	删除某个字符串			→ ' strg '
s.lstrip()  	删除左边的空格和换行符		→ 'string '
s.rstrip()  	删除右边的空格和换行符		→ ' string'

猜你喜欢

转载自blog.csdn.net/Treasure99/article/details/85080508