跟着leedcode刷算法 -- 字符串4

114 阅读2分钟

这是我参与11月更文挑战的第8天,活动详情查看:2021最后一次更文挑战

image.png

题七

有效的字母异位词

给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。

注意:若 s 和 t 中每个字符出现的次数都相同,则称 s 和 t 互为字母异位词。

示例 1:

输入: s = "anagram", t = "nagaram"

输出: true

示例 2:

输入: s = "rat", t = "car"

输出: false   提示:

1 <= s.length, t.length <= 5 * 104

s 和 t 仅包含小写字母  

进阶: 如果输入字符串包含 unicode 字符怎么办?你能否调整你的解法来应对这种情况?

相关标签

  • 哈希表
  • 字符串
  • 排序

先简单粗暴一点直接排序然后判断相等

class Solution:
    def isAnagram(self, s: str, t: str) -> bool:
        s=sorted(s)
        t=sorted(t)
        return s==t

输出结果:

image.png

这么简单就解答出来一定不是这个题的初衷

另外一种解法就是遍历成字典,之后进行对比

class Solution:
    def isAnagram(self, s: str, t: str) -> bool:
        res = {}
        for i in s:
            if i not in res: res[i] = 1
            else: res[i] += 1
        
        for j in t:
            if j not in res: return False
            res[j] -= 1
        
        for k in res:
            if res[k] != 0: return False
        
        return True

输出结果:

image.png

两种方法其实大同小异

题八:

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

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

示例:

s = "leetcode"

返回 0

s = "loveleetcode"

返回 2  

提示:

你可以假定该字符串只包含小写字母。

相关标签

  • 队列
  • 哈希表
  • 字符串
  • 计数

和上一题一样,先来个简单的解法:

class Solution:
    def firstUniqChar(self, s: str) -> int:
        for row in s:
            if s.count(row) == 1:
                return s.index(row)
        return -1

执行结果: image.png

看看这效率真的 超过5%的人。。。

使用字典计数

class Solution:
    def firstUniqChar(self, s: str) -> int:
        res = {}
        for i in s:
            if i not in res: res[i] = 1
            else: res[i] += 1
        
        for j in range(len(s)):
            if res[s[j]] == 1: return j
        
        return -1

执行结果:

image.png

题九

反转字符串

编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 s 的形式给出。

不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。

示例 1:

输入:s = ["h","e","l","l","o"]

输出:["o","l","l","e","h"]

示例 2:

输入:s = ["H","a","n","n","a","h"]

输出:["h","a","n","n","a","H"]   提示:

1 <= s.length <= 105

s[i] 都是 ASCII 码表中的可打印字符

相关标签

  • 递归
  • 双指针
  • 字符串

这题python来解答真的只需要一行

class Solution:
    def reverseString(self, s: List[str]) -> None:
        """
        Do not return anything, modify s in-place instead.
        """
        return s.reverse()

执行结果:

image.png

真的不要太简单了