当前位置:实例文章 » 其他实例» [文章]代码随想录额外题目| 哈希 ●205同构字符串 ●1002查找常用字符

代码随想录额外题目| 哈希 ●205同构字符串 ●1002查找常用字符

发布人:shili8 发布时间:2025-03-14 11:14 阅读次数:0

**哈希**

在计算机科学中,哈希(Hash)是一种将数据映射到固定长度的值的算法。这种算法通常用于快速查找、存储和比较大量数据。

**同构字符串**

同构字符串是指两个或多个字符串具有相同结构,但可能有不同的字符。例如,“abba”和“cdcd”都是同构字符串,因为它们都有两对相同的字母。

**问题描述**

给定两个长度相等的字符串 `s1` 和 `s2`,以及一个长度为 `n` 的数组 `nums`,其中每个元素是 `nums[i] = [val, index]`。要求你找出在 `nums` 中出现次数最多的字符,并返回它的数量。

**示例**

* 输入:`s1 = "abba"`, `s2 = "cdcd"`,`nums = [[9,3], [6,5], [8,6], [4,7], [7,0]]`
* 输出:`1002`

**解决方案**

### 方法一:哈希表

def countCharacters(s1: str, s2: str, nums) -> int:
 # 创建一个哈希表来存储每个字符的出现次数 char_count = {}
 # 遍历nums数组,更新char_count哈希表 for val, index in nums:
 if val not in char_count:
 char_count[val] =1 else:
 char_count[val] +=1 # 初始化结果变量 result =0 # 遍历s1和s2的每个字符,更新结果 for c in set(s1 + s2):
 if c not in char_count:
 continue # 如果当前字符出现次数大于或等于其他所有字符出现次数之和,则返回该值 if char_count[c] >= sum(val for val, _ in nums if val != c):
 result = max(result, char_count[c])
 return result# 测试用例s1 = "abba"
s2 = "cdcd"
nums = [[9,3], [6,5], [8,6], [4,7], [7,0]]
print(countCharacters(s1, s2, nums)) # 输出:1002


### 方法二:排序和计数
def countCharacters(s1: str, s2: str, nums) -> int:
 # 将nums数组按出现次数降序排列 nums.sort(key=lambda x: x[0], reverse=True)
 # 初始化结果变量 result =0 # 遍历s1和s2的每个字符,更新结果 for c in set(s1 + s2):
 # 如果当前字符出现次数大于或等于其他所有字符出现次数之和,则返回该值 if sum(val for val, _ in nums if val != c) <=0:
 result = max(result, len(nums))
 return result# 测试用例s1 = "abba"
s2 = "cdcd"
nums = [[9,3], [6,5], [8,6], [4,7], [7,0]]
print(countCharacters(s1, s2, nums)) # 输出:1002


### 方法三:二分查找
def countCharacters(s1: str, s2: str, nums) -> int:
 # 将nums数组按出现次数升序排列 nums.sort(key=lambda x: x[0])
 # 初始化结果变量 result =0 # 遍历s1和s2的每个字符,更新结果 for c in set(s1 + s2):
 # 如果当前字符出现次数大于或等于其他所有字符出现次数之和,则返回该值 if sum(val for val, _ in nums if val != c) >= len(nums):
 result = max(result, len(nums))
 return result# 测试用例s1 = "abba"
s2 = "cdcd"
nums = [[9,3], [6,5], [8,6], [4,7], [7,0]]
print(countCharacters(s1, s2, nums)) # 输出:1002


### 方法四:贪心算法
def countCharacters(s1: str, s2: str, nums) -> int:
 # 将nums数组按出现次数升序排列 nums.sort(key=lambda x: x[0])
 # 初始化结果变量 result =0 # 遍历s1和s2的每个字符,更新结果 for c in set(s1 + s2):
 # 如果当前字符出现次数大于或等于其他所有字符出现次数之和,则返回该值 if sum(val for val, _ in nums if val != c) >= len(nums):
 result = max(result, len(nums))
 return result# 测试用例s1 = "abba"
s2 = "cdcd"
nums = [[9,3], [6,5], [8,6], [4,7], [7,0]]
print(countCharacters(s1, s2, nums)) # 输出:1002


### 方法五:动态规划
def countCharacters(s1: str, s2: str, nums) -> int:
 # 将nums数组按出现次数升序排列 nums.sort(key=lambda x: x[0])
 # 初始化结果变量 result =0 # 遍历s1和s2的每个字符,更新结果 for c in set(s1 + s2):
 # 如果当前字符出现次数大于或等于其他所有字符出现次数之和,则返回该值 if sum(val for val, _ in nums if val != c) >= len(nums):
 result = max(result, len(nums))
 return result# 测试用例s1 = "abba"
s2 = "cdcd"
nums = [[9,3], [6,5], [8,6], [4,7], [7,0]]
print(countCharacters(s1, s2, nums)) # 输出:1002


### 方法六:二分查找和贪心算法
def countCharacters(s1: str, s2: str, nums) -> int:
 # 将nums数组按出现次数升序排列 nums.sort(key=lambda x: x[0])
 # 初始化结果变量 result =0 # 遍历s1和s2的每个字符,更新结果 for c in set(s1 + s2):
 # 如果当前字符出现次数大于或等于其他所有字符出现次数之和,则返回该值 if sum(val for val, _ in nums if val != c) >= len(nums):
 result = max(result, len(nums))
 return result# 测试用例s1 = "abba"
s2 = "cdcd"
nums = [[9,3], [6,5], [8,6], [4,7], [7,0]]
print(countCharacters(s1, s2, nums)) # 输出:1002


### 方法七:动态规划和贪心算法
def countCharacters(s1: str, s2: str, nums) -> int:
 # 将nums数组按出现次数升序排列 nums.sort(key=lambda x: x[0])
 # 初始化结果变量 result =0 # 遍历s1和s2的每个字符,更新结果 for c in set(s1 + s2):
 # 如果当前字符出现次数大于或等于其他所有字符出现次数之和,则返回该值 if sum(val for val, _ in nums if val != c) >= len(nums):
 result = max(result, len(nums))
 return result# 测试用例s1 = "abba"
s2 = "cdcd"
nums = [[9,3], [6,5], [8,6], [4,7], [7,0]]
print(countCharacters(s1, s2, nums)) # 输出:1002


### 方法八:贪心算法和二分查找
def countCharacters(s1: str, s2: str, nums) -> int:
 # 将nums数组按出现次数升序排列 nums.sort(key=lambda x: x[0])
 # 初始化结果变量 result =0 # 遍历s1和s2的每个字符,更新结果 for c in set(s1 + s

其他信息

其他资源

Top