LeetCode 2451. 異なる配列の異なる文字列

【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 - 2difference[i][j] = words[i][j+1] - words[i][j]'a'0'b'1'z'25

  • "acb" 文字列の差分整数の配列が であると します [2 - 0, 1 - 2] = [2, -1] 。

words1 つを除く すべての文字列は、 異なる整数の同じ配列を持ちます。別の文字列を見つける必要があります。

異なる整数配列内の  異なる文字列を返してください。 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

おすすめ

転載: blog.csdn.net/Tisfy/article/details/130859334