【2451. 差值数组不同的字符串】

news/2024/11/26 4:47:45/

来源:力扣(LeetCode)

描述:

给你一个字符串数组 words ,每一个字符串长度都相同,令所有字符串的长度都为 n

每个字符串 words[i] 可以被转化为一个长度为 n - 1差值整数数组 difference[i] ,其中对于 0 <= j <= n - 2difference[i][j] = words[i][j+1] words[i][j] 。注意两个字母的差值定义为它们在字母表中 位置 之差,也就是说 'a' 的位置是 0'b' 的位置是 1'z' 的位置是 25

  • 比方说,字符串 "acb" 的差值整数数组是 [2 - 0, 1 - 2] = [2, -1]

words 中所有字符串 除了一个字符串以外 ,其他字符串的差值整数数组都相同。你需要找到那个不同的字符串。

请你返回 words差值整数数组 不同的字符串。

示例 1:

输入:words = ["adc","wzy","abc"]
输出:"abc"
解释:
- "adc" 的差值整数数组是 [3 - 0, 2 - 3] = [3, -1]- "wzy" 的差值整数数组是 [25 - 22, 24 - 25]= [3, -1]- "abc" 的差值整数数组是 [1 - 0, 2 - 1] = [1, 1] 。
不同的数组是 [1, 1],所以返回对应的字符串,"abc"

示例 2:

输入:words = ["aaa","bob","ccc","ddd"]
输出:"bob"
解释:除了 "bob" 的差值整数数组是 [13, -13] 以外,其他字符串的差值整数数组都是 [0, 0]

提示:

  • 3 <= words.length <= 100
  • n == words[i].length
  • 2 <= n <= 20
  • words[i] 只含有小写英文字母。

方法:遍历

思路与算法

注意到字符串数组 words 的长度 m 最小为 3,因此我们记 diff0, diff1,diff2 分别是 words0 ,words1,words2 的差值整数数组,基于此分情况讨论:

  1. 如果 diff0 = diff1 ,那么我们遍历 words2 ∼ wordsm−1 ,找到第一个差值整数数组不等于 diff0 的字符串即可。
  2. 否则如果 diff0 ≠ diff1 ,那么我们只需判断 diff0 是否等于 diff2 即可。如果等于则足以说明 words1 是唯一一个与其他字符串的差值整数数组都不相同的字符串,因此直接返回 words1。反之,如果 diff0 不等于 diff2 则返回 words0

代码:

class Solution {
public:vector<int> get(string &word) {vector<int> diff(word.size() - 1);for (int i = 0; i + 1 < word.size(); i++) {diff[i] = word[i + 1] - word[i];}return diff;}string oddString(vector<string>& words) {auto diff0 = get(words[0]);auto diff1 = get(words[1]);if (diff0 == diff1) {for (int i = 2; i < words.size(); i++) {if (diff0 != get(words[i])) {return words[i];}}}return diff0 == get(words[2]) ? words[1] : words[0];}
};

执行用时:0ms, 在所有 C++ 提交中击败了100.00%的用户
内存消耗:7 MB, 在所有 C++ 提交中击败了93.75%的用户
复杂度分析
时间复杂度:O(mn),其中 m 是 words 的长度,n 是 words 中字符串的长度。计算每个字符串的差值整数数组复杂度为 O(n),比较两个字符串的差值整数数组是否相同的复杂度为 O(n),过程中最多比较 m 次,因此总体复杂度为 O(mn)。
空间复杂度:O(n)。过程中,最多会同时存在 3 个长度为 n 的差值整数数组,因此空间复杂度为 O(n)。
author:LeetCode-Solution


http://www.ppmy.cn/news/83454.html

相关文章

10 款最常用的Sketch在线插件!

Sketch 是一款高效、小巧的界面设计工具&#xff0c;在设计领域广受设计团队喜爱&#xff0c;帮助设计师创造了许多令人惊叹的作品。在使用 Sketch 时&#xff0c;辅助使用一些插件可以更高效地完成设计任务。Windows 也能用的「协作版 Sketch」即时设计&#xff0c;可作为网页…

Python竖版大屏 | 用pyecharts开发可视化的奇妙探索2

你好&#xff01;我是马哥python说&#xff0c;一名10年程序猿&#xff0c;正在试错用pyecharts开发可视化大屏的非常规排版。 以下&#xff0c;我用8种ThemeType展示的同一个可视化数据大屏&#xff0c;可视化主题是分析淄博烧烤现象。 1、SHINE主题 2、LIGHT主题 3、MACARO…

uniapp 实现手写签字组件

前言&#xff1a; 在移动应用中&#xff0c;手写签名是一项非常方便和实用的功能。本文将介绍如何使用 Uniapp 实现一个手写签字组件&#xff0c;并支持在 APP、小程序和 Web 应用中使用。 实现思路&#xff1a; 创建一个空白画布&#xff1b; 监听画布上的鼠标或触摸事件&a…

C++实现图—邻接矩阵,邻接表,深度遍历,广度遍历

目录 1.图的基本概念 2.图的存储结构 2.1邻接矩阵 2.2 邻接表 3.图的遍历 3.1广度优先遍历 3.2图的深度遍历 总结&#xff1a; 1.图的基本概念 图是由顶点集合以及顶点之间的关系组成的一种数据结构&#xff1a;G (V,E),其中顶点集合V{x|x属于某个对象集}是有穷非空集合…

Nginx基础概念

一.nginx简介 1.什么是nginx&#xff1f; Nginx 是高性能的 HTTP 和反向代理的web服务器&#xff0c;处理高并发能力是十分强大的&#xff0c;能经受高负 载的考验,有报告表明能支持高达 50,000 个并发连接数。 其特点是占有内存少&#xff0c;并发能力强&#xff0c;事实上n…

电压放大器的主要指标有哪些方面

电压放大器是电子电路中常用的器件&#xff0c;在选择和评估电压放大器时&#xff0c;需要考虑以下几个主要指标&#xff1a; 输入电阻&#xff08;Input Resistor&#xff09;&#xff1a;输入电阻是指放大器输入端的电阻值&#xff0c;它反映了放大器将输入信号转换成输出信号…

工作记录------小镇做题家思考

工作记录------小镇做题家思考 今天看到一篇好文&#xff0c;关于小镇做题家成长的路程&#xff0c;失败与反思&#xff0c;很有感概。 记录下一些自己的思考。 寒门子弟与其他子弟的区别&#xff1a; 寒门子弟受限于家庭环境因素所带来的视野、认知限制。在进入大学&#xff…

5.3 标准I/O(二、三)

目录 读写流 按字符输入 fgetc-示例 按字符输出 fputc-示例 按行输入 按行输出 fputs – 示例 笔记 读写流 流支持不同的读写方式: 读写一个字符&#xff1a;fgetc()/fputc()一次读/写一个字符 读写一行&#xff1a;fgets()和fputs()一次读/写一行 读写若干…