データ構造とアルゴリズム: 同型文字列

データ構造とアルゴリズム: 同型文字列

[[441407]]

同型文字列

LeetCode の質問へのリンク: https://leetcode-cn.com/problems/isomorphic-strings

2 つの文字列 s と t が与えられた場合、それらが同型であるかどうかを判断します。

s 内の文字を何らかのマッピングで置き換えて t を取得できる場合、2 つの文字列は同型です。

文字の出現ごとに、文字の順序を変更せずに別の文字にマッピングする必要があります。異なる文字を同じ文字にマッピングすることはできません。同じ文字は同じ文字にのみマッピングできます。また、文字はそれ自身にマッピングできます。

例1:

  • 入力: s = "egg"、t = "add"
  • 出力: true

例2:

  • 入力: s = "foo"、t = "bar"
  • 出力: false

例3:

  • 入力: s = "paper"、t = "title"
  • 出力: true

ヒント: s と t は同じ長さであると仮定できます。

アイデア

文字列に小文字がすべて含まれているわけではないので、配列を使用することは適切ではありません。マッピングには map を使用します。

2つのマップを使用して、s[i]とt[j]、t[j]とs[i]間のマッピング関係を保存します。対応がないことが判明した場合は、すぐにfalseを返します。

C++ コードは次のとおりです。

  1. クラスソリューション{
  2. 公共
  3. bool isIsomorphic(文字列 s, 文字列 t) {
  4. unordered_map< char , char > map1;
  5. unordered_map< char , char > map2;
  6. ( int i = 0, j = 0; i < s.size ( ); i++, j++) {
  7. if (map1.find(s[i]) == map1.end ()) { // map1はs[i]からt[j]へのマッピングを保存します
  8. map1[s[i]] = t[j];
  9. }
  10. if (map2.find(t[j]) == map2.end ()) { // map2はt[j]からs[i]へのマッピングを保存します
  11. map2[t[j]] = s[i];
  12. }
  13. // マッピングが一致しない場合は、すぐにfalseを返します 
  14. もし (map1[s[i]] != t[j] || map2[t[j]] != s[i]) {
  15. 戻る 間違い;
  16. }
  17. }
  18. 戻る 真実;
  19. }
  20. };

その他の言語

ジャワ

  1. クラスソリューション{
  2. パブリックブール値 isIsomorphic(文字列 s, 文字列 t) {
  3. Map<文字,文字> map1 = new HashMap<>();
  4. Map<文字,文字> map2 = new HashMap<>();
  5. ( int i = 0, j = 0; i < s.length(); i++, j++) {
  6. map1.containsKey(s.charAt(i)) の場合 {
  7. map1.put(s.charAt(i), t.charAt(j)); // map1はs[i]からt[j]へのマッピングを保存します
  8. }
  9. map2.containsKey(t.charAt(j)) の場合 {
  10. map2.put(t.charAt(j), s.charAt(i)); // map2はt[j]からs[i]へのマッピングを保存します
  11. }
  12. // マップできないのでfalseを返す 
  13. (map1.get(s.charAt(i)) != t.charAt(j) || map2.get(t.charAt(j)) != s.charAt(i)) の場合 {
  14. 戻る 間違い;
  15. }
  16. }
  17. 戻る 真実;
  18. }
  19. }

パイソン

  1. クラスソリューション:
  2. def isIsomorphic(self, s: str, t: str) -> bool:
  3. default_dict1 = デフォルト辞書(str)
  4. default_dict2 = defaultdict(str)
  5.  
  6. len(s) != len(t) の場合:戻り値 間違い 
  7.  
  8. iが範囲(len(s))内にある場合:
  9. default_dict1[s[i]]でない場合:
  10. default_dict1[s[i]] = t[i]
  11.  
  12. default_dict2[t[i]]でない場合:
  13. default_dict2[t[i]] = s[i]
  14.  
  15. default_dict1[s[i]] != t[i]またはdefault_dict2[t[i]] != s[i] の場合:
  16. 戻る 間違い 
  17.  
  18. 戻る 真実 

行く

  1. func isIsomorphic(s 文字列, t 文字列) bool {
  2. map1 := make(map[byte]byte)
  3. map2 := make(map[byte]byte)
  4. i := 範囲 s {
  5. _の場合、ok := map1[s[i]]; !ok {
  6. map1[s[i]] = t[i] // map1はs[i]からt[j]へのマッピングを格納します
  7. }
  8. _の場合、ok := map2[t[i]]; !ok {
  9. map2[t[i]] = s[i] // map2はt[i]からs[j]へのマッピングを格納します
  10. }
  11. // マップできないのでfalseを返す 
  12. もし (map1[s[i]] != t[i]) || (map2[t[i]] != s[i]) {
  13. 戻る 間違い 
  14. }
  15. }
  16. 戻る 真実 
  17. }

JavaScript

  1. var isIsomorphic =関数(s, t) {
  2. len = s.length;とします。
  3. if(len === 0)戻り値 真実;
  4. maps = new Map();
  5. mapt = new Map();
  6. (i = 0, j = 0; i < len; i++, j++)の場合{
  7. (!maps.has(s[i]))の場合{
  8. maps.set (s[i],t[j]); // mapsはs[i]からt[j]へのマッピングを保存します
  9. }
  10. (!mapt.has(t[j]))の場合{
  11. mapt.set (t[j],s[i]); // maptはt[j]からs[i]へのマッピングを保存します
  12. }
  13. // マップできないのでfalseを返す 
  14. if(maps.get(s[i]) !== t[j] || mapt.get(t[j]) !== s[i]){
  15. 戻る 間違い;
  16. }
  17. };
  18. 戻る 真実;
  19. };

<<:  人工知能は「絶滅危惧」言語の保護に大きな役割を果たすかもしれません!

>>:  段階的な自動運転は後から追いつくことができるか?

ブログ    
ブログ    

推薦する

生成 AI: サイバーセキュリティにとっての恩恵か、それとも災いか?

脅威の状況が絶えず変化する中、高度なサイバー攻撃に対する防御手段として、生成型人工知能 (GAI) ...

彼らはAIを使って時の塵を拭い去り、半世紀前のアジア競技大会で中国が初めて金メダルを獲得した時の記憶を再現した。

杭州アジア競技大会初の金メダルが誕生した。女子軽量級ダブルスカルボート決勝では、中国の鄒佳琦選手と邱...

2.7B は Llama 2 70B に勝てる、Microsoft は「小さな言語モデル」を提供! 96台のA100が14日間でPhi-2を訓練し、Google Gemini nanoを圧倒

大きなモデルの髪は、本当にどんどんカールしてきています! 11月に、OpenAIはまずGPTを使用し...

442人の著者による100ページの論文! Googleは2年かけて大規模モデル向けの新しいベンチマーク「BIG-Bench」をリリースした。

1 件の AI 論文、442 人の著者。著者の貢献のために特別な章も設けられています。 100ペー...

Gemini vs ChatGPT: Google の最新 AI と ChatGPT のどちらが優れているのでしょうか?

Google は、最新かつ最も強力な AI モデルである Gemini 1.0 を発表し、AI の...

自然言語処理必読本: 理論と実践のバランスが取れた 5 冊の本

この記事は、公開アカウント「Reading the Core」(ID: AI_Discovery)か...

なぜ私たちは、AI による顔の変形が「偽物」だと今でも思っているのでしょうか?

『スター・ウォーズ』のスピンオフシリーズ『ボバ・フェットの書』には、ファンの間で刺激的な議論を巻き...

物流ロボットが急増中!今後の市場の成長は2つのエンジンによって支えられる

最近、イスラエルを拠点とするスマート物流ロボットのスタートアップであるCAJA Roboticsは、...

データマイニングの10の主要なアルゴリズムを、初心者でも一目で理解できるように平易な言葉で説明しました。

優秀なデータ アナリストは、基本的な統計、データベース、データ分析方法、考え方、データ分析ツールのス...

クアルコムのアモン社長:5G+AIがインテリジェントな接続の未来を切り開く

7月9日、2020年世界人工知能大会(WAIC)クラウドサミットが正式に開幕した。クアルコムのクリス...

Google が地図「タイムマシン」を公開: 100 年前のあなたの街はどんな様子だったでしょうか?

この記事はAI新メディアQuantum Bit(公開アカウントID:QbitAI)より許可を得て転載...

画像内のオブジェクト検出のための ML データを探索および視覚化する方法

近年、機械学習データ(MLデータ)を深く理解する必要性に対する認識が高まっています。しかし、大規模な...

...

どのようなタイプのスマートビルが AI の導入をリードするのでしょうか?

人工知能 (AI) は建物の避けられない未来ですが、過去 10 年間のスマート テクノロジーの採用と...