2451. 差值数组不同的字符串
难度简单
34
给你一个字符串数组 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中 差值整数数组 不同的字符串。
示例 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] 。
/**
* @param {string[]} words
* @return {string}
*/
var oddString = function(words) {
let i = 2
let diff1 = getDiff(words[0])
let diff2 = getDiff(words[1])
while(i<words.length){
let diff = getDiff(words[i])
if(diff1===diff2&&diff!==diff1){
return words[i]
}else if(diff1!==diff2){
return diff === diff1?words[1]:words[0]
}
i++
}
};
var getDiff = function(word){
let arr = []
for(let x = 0;x<word.length-1;x++){
let diff = word[x+1].charCodeAt()-word[x].charCodeAt()
arr.push(diff)
}
return arr.toString()
}
先计算第一项,第二项的差值数组diff1、diff2,循环剩下的字符串计算差值数组diff,比较diff1和diff2是否相同,diff1和diff2相同则比较diff和diff1或diff2是否相同,不同则返回当前字符串,diff1和diff2不同时比较diff和diff1,相同返回第二项的字符串,不同返回第一项的字符串