2023-05-25 LeetCode每日一题(差值数组不同的字符串)

给定一个字符串数组,每个字符串长度相同,计算它们的差值整数数组并使用哈希表统计出现次数。目标是找出唯一不同的字符串,其差值整数数组在哈希表中出现一次。
摘要由CSDN通过智能技术生成

2023-05-25每日一题

一、题目编号

  1. 差值数组不同的字符串

二、题目链接

点击跳转到题目位置

三、题目描述

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

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

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

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

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

四、解题代码

class Solution {
    map<vector<int>, int> hash;
public:
    string oddString(vector<string>& words) {
        string s;
        int n = words.size();
        vector<vector<int>> res;
        res.resize(n+1);
        for(int i = 0; i < n; ++i){
            for(int j = 0; j < words[i].size() - 1; ++j){
                res[i].push_back(words[i][j+1] - words[i][j]);
            }
            hash[res[i]]++;
        }
        for(int i = 0; i < n; ++i){
            if(hash[res[i]] == 1){
                return words[i];
            }
        }
    return " ";
    }
};

五、解题思路

(1) 在题目中有描述除了一个字符串以外,找到那个不同的字符串这样的字样,我们考虑到的是用哈希表来进行统计。

(2) 下面所要做的就是如何先初始化这个哈希表,用map<vector , int> hash来表示前者表示差值整数数组,后者表示个数。

(3) 遍历字符串数组,遍历每一个字符串,求出每一个字符串的差值整数数组,然后在哈希表中自增计数。(用一个res数组保存每一个下标的差值整数数组)

(4) 最后遍历res数组,如果对应的下标的差值整数数组在哈希表中的个数为1个,那么就返回该下标对应的字符串即可。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值