[leecode]3.无重复字符的最长子串(python3)&字符串方法

 做了几个leecode题目以后感觉数据结构方面的知识比较薄弱,需要加强啊。

首先逻辑理清楚,u是不重复的字符串,初始化为空字符串,res是我们要返回的结果,初始化为0。

1.for循环次数为s字符串长度,每次循环的字符串用k表示。

2.如果k不在u里面,把k加到u里面,res等于u的长度和res中的最大值。

3.如果k在u里面,说明已经出现重复的字符,这个时候k是一个和u中有重复的字符,index是找出k字符在u中的索引位置,将u更新为

u=u[index+1:]+k

然后继续循环直至循环完毕。 

class Solution:
    def lengthOfLongestSubstring(self, s):
        """
        :type s: str
        :rtype: int
        """
        res = 0
        u = ''
        for i in range(len(s)):
            k = s[i]
            if k not in u:
                u+=k
                res = max(len(u),res)
            else:
                index = u.find(k)
                u = u[index+1:]+k
        return res

有几个有意思的地方,u也可以用空列表,那么寻找索引就要使用u.index(k),当然字符串也可以使用u.index(k)来索引,试了一下发现还是字符串更快一点。

如果直接循环s中的字符k,即for k in s:,代码可以少一点,但是实际性能也不如现在的。

字符串方法(常用)

1.搜索与替换

  • str.find('x')    返回第一个'x'出现的下标,多个时返回第一个,没有时返回-1。参数可加起始位置和结束为止。
  • str.index('x')    同上,但是不存在时会返回异常。
  • str.count('x')    返回x出现的次数。
  • str.replace(old,new)    替换字符串。
  • str.format() 字符串格式化。

2.字符串的分割与拼接

  • str.split()    将字符串分割开来,括号里可以加入分割的方式,默认按照空格分割。
  • s.join(str)    将s依次插入到str的每个间隔里,s是字符串。
  • str[start:end]    左包右不包的切片。

 

3,字符串的测试和替换函数

  • S.startswith(prefix[,start[,end]]) #是否以prefix开头 
  • S.endswith(suffix[,start[,end]]) #以suffix结尾 
  • S.isalnum() #是否全是字母和数字,并至少有一个字符 
  • S.isalpha() #是否全是字母,并至少有一个字符 
  • S.isdigit() #是否全是数字,并至少有一个字符 
  • S.isspace() #是否全是空白字符,并至少有一个字符 
  • S.islower() #S中的字母是否全是小写 
  • S.isupper() #S中的字母是否便是大写 
  • S.istitle() #S是否是首字母大写的

4.删除空格与特殊符号

  • str.strip()  去掉字符串两端空格和换行符
  • str.strip('')  去掉字符串两端空格
  • str.strip('x')  去掉某个字符串
  • str.lstrip()  去掉左边的空格和换行符
  • str.rstrip()  去掉右边的空格和换行符

你可能感兴趣的:(leecode)