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

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

[[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. };

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

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

ブログ    
ブログ    

推薦する

NLPの年間進捗状況は年に1回まとめられています。2021年の研究のホットスポットは何でしょうか?

2021 年には、ML と NLP の分野で多くのエキサイティングな進展がありました。 Sebas...

中国チームが最優秀論文賞と最優秀システム論文賞を受賞し、CoRLの受賞論文が発表されました。

CoRL は 2017 年に初めて開催されて以来、ロボット工学と機械学習の交差点における世界トップ...

...

英国のAI研究者マイケル・ローンズによる機械学習の5つの大きな落とし穴を避けるための独占ガイド

[[416810]]この記事はLeiphone.comから転載したものです。転載する場合は、Leip...

テクノロジートレンド: 2024 年に流行するものは何でしょうか?

人々は、たとえすべてを正しく行えなかったとしても、毎年年末には必ず将来を楽しみにするものです。今年は...

あなたの向かいに座っている「オフィス秘書」はロボットかもしれませんか?ロシアが超リアルなロボットを発表

ロボットがいくつかの簡単な作業を実行できることは目新しいことではありません。最近、ロシア西部の都市ペ...

GPUベースの人工知能と機械学習アプリケーション

[51CTO.com クイック翻訳]今日、グラフィックス プロセッシング ユニット (GPU) は、...

自動運転が何千もの家庭に普及するまでにどれくらいの時間がかかるのでしょうか?

2019年9月に百度、海亮科技、センスタイムなどの企業が世界初の自動運転車の商用ライセンスを取得し...

人工知能とビッグデータは私たちの生活をこのように変えるだろう

現在、知能ロボットが急速に発展していますが、機械を知能化するための鍵は実はビッグデータです。ビッグデ...

2020 年のトップ産業人工知能アプリケーション

[[337240]]人工知能技術は今、世界を変えつつあります。多くの業界はすでに、ビジネス プロセス...

AIモデルは研究者ががん検出の精度を向上させるのに役立つ

マドゥ・ネール博士とアシャ・ダス博士は、人工知能 (AI) モデルを使用して患者の組織サンプルのスキ...

データ分布の正規性を判断するための11の基本的方法

データ サイエンスと機械学習の分野では、多くのモデルはデータが正規分布していると想定しているか、デー...

Daguan 推奨アルゴリズムの実装: 協調フィルタリングのアイテム埋め込み

レコメンデーションシステムの本質は、ユーザーのニーズが不明確な場合の情報過多の問題を解決し、ユーザー...

量子畳み込みネットワークにおける「不毛のプラトー」現象が解決され、新たな研究により量子AIの大きな問題が克服された

量子コンピュータの出現は、コンピュータ分野に多くの進歩をもたらしました。量子コンピュータ上で実行され...

スマートビルにはスマートクリーニングが必要な理由

スマートビルへの移行はヨーロッパ全土で加速しています。あらゆる業界の組織が顧客と従業員のエクスペリエ...