2023-05-25每日一题
一、题目编号
- 差值数组不同的字符串
二、题目链接
三、题目描述
给你一个字符串数组 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个,那么就返回该下标对应的字符串即可。