【LetMeFly】2451. 異なる差分配列を持つ文字列
Leetcode トピックのリンク: https://leetcode.cn/problems/odd-string-difference/
words
それぞれが同じ長さの文字列の配列がある場合、すべての文字列の長さを としますn
。
各文字列は、 長さ の 差の整数の配列words[i]
に変換できます 。ここで、 for は です 。2 つの文字の違いは、アルファベットにおける それらの位置 、つまり is の位置 、 is の位置 、および is の位置 の差として定義されることに注意してください 。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
1 つを除く すべての文字列は、 異なる整数の同じ配列を持ちます。別の文字列を見つける必要があります。
異なる整数配列内の 異なる文字列を返してください。 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" 説明:差分整数配列が[13, -13]の"bob"を除き、その他の文字列 差分整数配列はすべて [0, 0] です。
ヒント:
3 <= words.length <= 100
n == words[i].length
2 <= n <= 20
words[i]
小文字の英字のみが含まれます。
方法 1: 数を数える
2 つのループ層 (0 から n-1 までのループの最初の層) は、単語の各位置を列挙します。
2 番目の層は、単語リスト内の各単語をループし、ハッシュ テーブルを使用して、現在の位置での各単語の「差分」をカウントします。
単語リストを再度たどって、単語の現在位置での「違い」が 1 回だけ出現する場合は、その単語を返します。
- 時間計算量O (文字の合計) O(文字の合計)O (文字の合計)
- 空間複雑度O ( 1 ) O(1)O ( 1 )、ハッシュ テーブルには最大 2 つのキー値があります
ACコード
C++
class Solution {
public:
string oddString(vector<string>& words) {
int n = words[0].size();
for (int j = 0; j < n - 1; j++) {
unordered_map<int, int> ma;
for (int i = 0; i < words.size(); i++) {
ma[words[i][j + 1] - words[i][j]]++;
}
for (int i = 0; i < words.size(); i++) {
if (ma[words[i][j + 1] - words[i][j]] == 1) {
return words[i];
}
}
}
return ""; // FAKE RETURN
}
};
実はハッシュテーブルにはキー値が多くても2つしかないので、手動ハッシュテーブルに変更すればさらに効率が上がります(既に100%、99.43%ですが)
パイソン
from typing import List
from collections import defaultdict
class Solution:
def oddString(self, words: List[str]) -> str:
n = len(words[0])
for j in range(0, n - 1):
ma = defaultdict(int)
for word in words:
ma[ord(word[j + 1]) - ord(word[j])] += 1
for word in words:
if ma[ord(word[j + 1]) - ord(word[j])] == 1:
return word
return "" # FAKE RETURN
同時にCSDNに記事を公開します。オリジナリティは簡単ではありません。元の記事へのリンクを添付してください〜Tisfy
: https://letmefly.blog.csdn.net/article/details/130859334