这是我参与11月更文挑战的第8天,活动详情查看:2021最后一次更文挑战
题七
有效的字母异位词
给定两个字符串 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
输出结果:
这么简单就解答出来一定不是这个题的初衷
另外一种解法就是遍历成字典,之后进行对比
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
输出结果:
两种方法其实大同小异
题八:
字符串中的第一个唯一字符
给定一个字符串,找到它的第一个不重复的字符,并返回它的索引。如果不存在,则返回 -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
执行结果:
看看这效率真的 超过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
执行结果:
题九
反转字符串
编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 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()
执行结果:
真的不要太简单了