【每日一题Day217】LC2451差值数组不同的字符串 | 枚举+变量记录

news/2024/11/9 10:07:50/

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

给你一个字符串数组 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 中所有字符串 除了一个字符串以外 ,其他字符串的差值整数数组都相同。因此我们可以求出第一个字符串的差值数组,并记录该差值数组出现的次数count。然后枚举其他字符串,比较差值数组是否相同,分情况讨论。

    • 如果差值数组不同,并且count>1,那么此时的字符串即为答案。
    • 但是,还存在一种情况,第一个字符串为答案,那么最终count一直为1。
  • 实现

    class Solution {public String oddString(String[] words) {// 先记录第一个字符串的差值数组,并记录该差值数组出现的次数count// 再记录与它不同的差值数组的下标diff// 最后如果count>1,那么返回diff,否则返回0int n = words[0].length();int[] array = new int[n - 1];int count = 1, index = -1;for (int i = 0; i < n - 1; i++){array[i] = words[0].charAt(i + 1) - words[0].charAt(i);}for (int j = 1; j < words.length; j++){boolean same = true;for (int i = 0; i < n - 1; i++){if (words[j].charAt(i + 1) - words[j].charAt(i) != array[i]){same = false;index = j;break;}}if (same) count++;if (count > 1 && index != -1) return words[index];}return words[0];}
    }
    
    • 复杂度
      • 时间复杂度: O ( m ∗ n ) \mathcal{O}(m*n) O(mn),n为字符串长度,m为字符串个数
      • 空间复杂度: O ( n ) \mathcal{O}(n) O(n)

纵向比较实现2

  • 思路:

    也是先记录第一个字符串的差值数组,然后找到与它不同的字符串,那么答案幸福二选一。再选择另一个字符串与第一个字符串的差值数组进行比较,如果不同,答案为第一个字符串,反之为另一个字符串

  • 实现

    class Solution {public String oddString(String[] words) {int n = words.length;int i = 1;for(i = 1; i < n; i++){if(!check(words[i], words[0])){break;}}for(int j = 1; j < n; j++){if(j != i){if(check(words[j], words[0])){return words[i];}else{return words[0];}}}return "";}private boolean check(String s1, String s2){int n = s1.length();int m = s1.charAt(0) - s2.charAt(0);for(int i = 1; i < n; i++){if(s1.charAt(i) - s2.charAt(i) != m){return false;}}return true;}
    }作者:一只粗糙的疯子
    链接:https://leetcode.cn/problems/odd-string-difference/solutions/2282834/chai-zhi-shu-zu-bu-tong-de-zi-fu-chuan-b-siph/
    来源:力扣(LeetCode)
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
    

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

相关文章

微签助力中融基金电子文件安全高效签章

中融基金重安全&#xff0c;炼丹炉里炼微签 这次讲一个微签在炼丹炉里炼出了火眼金睛的故事。 先看一个数字。 金融隐私泄露事件大约以每年35&#xff05;的数据在增长。 数字来自《中国银行保险报》与亚信网络安全产业技术研究院发布的《金融行业网络安全白皮书》。 大数据时…

Ubuntu TDengine集群搭建

我这里用三台服务器搭建集群 1、如果搭建集群的物理节点上之前安装过TDengine先卸载清空&#xff0c;直接执行以下4条命令 rmtaos rm -rf /var/lib/taos rm -rf /var/log/taos rm -rf /etc/taos2、确保集群中所有主机开放端口 6030-6043/tcp&#xff0c;6060/tcp&#xff0c;…

Java 远程连接 SQLite 数据库

Java 可以使用 JDBC API 来连接 SQLite 数据库。但是&#xff0c;SQLite 不支持远程连接&#xff0c;因为它是一种文件数据库&#xff0c;需要直接访问数据库文件。 如果您需要从远程位置访问 SQLite 数据库&#xff0c;可以将 SQLite 数据库文件放在共享文件夹中&#xff0c;…

高精度加法

给定两个正整数&#xff08;不含前导 0&#xff09;&#xff0c;计算它们的和。 输入格式 共两行&#xff0c;每行包含一个整数。 输出格式 共一行&#xff0c;包含所求的和。 数据范围 1≤整数长度≤100000 输入样例&#xff1a; 12 23 输出样例&#xff1a; 35 代码: #incl…

一些云原生开源安全工具介绍

本博客地址&#xff1a;https://security.blog.csdn.net/article/details/130789465 一、Kubernetes安全监测工具kube-bench kube-bench是一个用Golang开发的、由Aqua Security发布的自动化Kubernetes基准测试工具&#xff0c;它运行CIS Kubernetes基准中的测试项目。这些测试…

Facebook拆分的深度思考:社交媒体真的是必需品吗?

在当今数字化时代&#xff0c;社交媒体已经成为我们日常生活中不可或缺的一部分。而Facebook作为其中的巨头之一&#xff0c;不可否认地对人们的社交行为和信息传播产生了巨大的影响。 然而&#xff0c;随着越来越多的争议和讨论浮出水面&#xff0c;我们有必要进行深入思考&a…

2023系统分析师---论需求分析方法及应用(内部消息)

准备素材: 需求分析是提炼、分析和仔细审查获取需求的过程,需求分析的目的是确保所有的项目干系人(利益相关者)都能够理解需求的含义并找出其中的错误、遗漏或其他不足的地方。需求分析的关键在于问题域的研究与理解。为了便于理解问题域,现代软件工程所推荐的需求分析方…

【C/S架构安全测试】客户端应用程序测试(测试项补充)

文章目录 前言一、客户端测试1.1 程序加壳检测1.2 签名检测1.3 逆向分析/反编译保护1.4 动态调试防护1.5 客户都程序完整性校验1.6 键盘消息记录1.7 DLL注入1.8 DLL劫持1.9 本地文件安全1.10 网络数据传输安全1.11 本地注册表安全1.12 内存安全1.13 本地调试安全二、服务端测试…