3271.哈希分割字符串

ops/2024/11/17 10:15:18/

3271.哈希分割字符串

2.1、题目描述

给你一个长度为 n 的字符串 s 和一个整数 knk倍数 。你的任务是将字符串 s 哈希为一个长度为 n / k 的新字符串 result

首先,将 s 分割成 n / k子字符串 ,每个子字符串的长度都为 k 。然后,将 result 初始化为一个 字符串。

我们依次从前往后处理每一个 子字符串

  • 一个字符的 哈希值 是它在 字母表 中的下标(也就是 'a' → 0'b' → 1 ,… ,'z' → 25)。
  • 将子字符串中字幕的 哈希值 求和。
  • 将和对 26 取余,将结果记为 hashedChar
  • 找到小写字母表中 hashedChar 对应的字符。
  • 将该字符添加到 result 的末尾。

返回 result

2.2、代码实现

下面是这个问题的 C++ 代码实现:

class Solution {
public:string stringHash(string s, int k) {int n = s.size(); // 字符串的长度int m = n / k;    // 子字符串的数量string ret;       // 存储结果的字符串for (int i = 0; i < m; i++) {int sum = 0;  // 初始化每个子字符串的哈希值总和// 计算当前子字符串的哈希值for (int j = 0; j < k; j++) {sum += s[i * k + j] - 'a'; // 获取字符的下标值并求和}sum %= 26; // 对 26 取余ret.push_back(sum + 'a'); // 将对应的字符添加到结果中}return ret; // 返回结果字符串}
};

2.3、代码详解

  1. 变量定义
    • n:字符串 s 的长度。
    • m:子字符串的数量,计算方法是 n / k
    • ret:存储最终结果的字符串。
  2. 处理子字符串
    • 外层循环:遍历每个子字符串。
    • 内层循环:遍历当前子字符串的每个字符,计算它们的哈希值总和。
    • 对总和取余 26,得到 hashedChar
    • hashedChar 对应的字符添加到结果字符串 ret 中。
  3. 返回结果:返回生成的哈希结果字符串 ret

总结

这个问题通过简单的字符串处理和数学运算实现了字符串的哈希转换。算法时间复杂度为 O(n),其中 n 是字符串的长度。这种方法高效且易于理解,非常适合用来解决类似的字符串处理问题。


http://www.ppmy.cn/ops/134397.html

相关文章

【C++】list 与 string 基础与实现字符串操作

【C】使用 list 与 string 实现基础字符串操作 文章目录 一、字符串的基础操作1.1 - startsWith1.2 - endsWith1.3 - trim1.4 - indexOf1.5 - replaceAll 二、list 基础操作2.1 - 遍历2.1.1 - 使用迭代器访问2.1.2 - 使用基于范围的 for 循环遍历2.1.3 - 使用标准算法库遍历 2.…

python面向对象基础入门

面向对象 基本的实现方法大概如此 class Student(object):def __init__(self, name, score):self.name nameself.score scoredef print_score(self):print(%s: %s % (self.name, self.score))在面向对象的思想中&#xff0c;面对一个问题&#xff0c;首先应该考虑这个问题所…

Android 最新的AndroidStudio引入依赖失败如何解决?如:Failed to resolve:xxxx

错误信息&#xff1a; 在引入依赖时报错&#xff1a;Failed to resolve: xxx.xxxx:1.1.0 解决方案&#xff1a; 需要修改maven库的代理&#xff0c;否则就需要翻墙编译 新的AndroidStudio版本比较坑&#xff0c;修改代理的位置发生了变化&#xff1a; 最新变化&#xff1a;…

python 同时控制多部手机

在这个智能时代,我们的手机早已成为生活和工作中不可或缺的工具。无论是管理多个社交媒体账号,还是处理多台设备上的事务,如何更高效地控制多个手机成为了每个人的痛点。 今天带来的这个的软件为你提供了一键控制多部手机的强大功能。无论是办公、娱乐,还是社交,你都能通过…

Docker 命令大全

Docker 命令大全 Docker 是一种开源的应用容器引擎&#xff0c;它允许开发者打包他们的应用以及依赖包到一个可移植的容器中&#xff0c;然后发布到任何流行的 Linux 机器上&#xff0c;也可以实现虚拟化。容器是完全使用沙箱机制&#xff0c;相互之间不会有任何接口。 本文将…

CSS基础知识05(弹性盒子、布局详解,动画,3D转换,calc)

目录 0、弹性盒子、布局 0.1.弹性盒子的基本概念 0.2.弹性盒子的主轴和交叉轴 0.3.弹性盒子的属性 flex-direction row row-reverse column column-reverse flex-wrap nowrap wrap wrap-reverse flex-dirction和flex-wrap的组合简写模式 justify-content flex-s…

【RK3588 Linux 5.x 内核编程】-内核中的链表(Linked List)及使用

内核中的链表(Linked List)及使用 文章目录 内核中的链表(Linked List)及使用1、Linked List介绍2、Linux内核中的链表3、链表的操作3.1链表初始化3.2 创建节点3.3 添加节点3.4 删除节点3.5 替换节点3.6 移动节点3.7 链表旋转3.8 链表检测3.9 链表分割与合并3.10 链表遍历4、驱…

无人机云台基础——CKESC电调小课堂10

1. 定义与基本原理 CKESC-专业级电调研发生产供应商http://www.ckesc.com 无人机云台是一种安装在无人机上用于稳定相机或其他传感器的装置。它的主要作用是隔离无人机本身的震动和姿态变化&#xff0c;确保挂载的设备能够保持相对稳定的拍摄角度和位置。其基本原理是基于惯性…