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

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

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

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

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

ブログ    

推薦する

リアルスティールの実写版!山東省の3人組のチームが、最小遅延12ミリ秒の史上最速ボクシングロボットを開発した。

この男性が自分の動きでロボットを操作している様子を注意深く見てください。彼がパンチを繰り出すと、ロボ...

周洪義:汎用人工知能は詐欺であり、垂直分野と組み合わせる必要がある

3月23日、360テクノロジー株式会社と華泰聯合証券はIPO上場指導契約を締結した。これは360がI...

画像認識が最も得意な会社はどこでしょうか? Microsoft、Amazon、Google、それともIBM?

[51CTO.com クイック翻訳] 認識ソフトウェアは、特定の種類の画像を正しく分類するのに非常...

テキストアドベンチャーゲームは人工知能の助けを借りて新たな命を吹き込まれる

こんなゲームがあります:あなたの名前はシャオミン、ラリオンの高貴な領主であり、あなたの指揮下に多数の...

...

カンファレンスで GitHub のトップ 10 AI アップデートが発表されました。

著者 | タスミア企画 | ヤン・ジェン制作:51CTO テクノロジースタック(WeChat ID:...

IEEE テクノロジー分野賞発表: ML パイオニアがリストに、中国本土から受賞した唯一の学者は清華大学の学生

[[409353]] IEEE が再び栄誉を授与する時が来ました。 7月2日、米国電気電子学会(IE...

機械学習は創造的な仕事に役立つ

【51CTO.com クイック翻訳】 [[397384]] [序文]直感に反するように聞こえるかもし...

機械学習で知っておくべき 8 つの次元削減手法、最後の手法は超ハードコアです!

次元削減とは、高次元のデータ セットを同等の低次元空間に変換するプロセスです。実際のデータ セットに...

人工知能開発の動向

ケビン・ケリー氏は「人工知能は人類社会を混乱させる次のものだ」と語った。 2020年は、全世界が前例...

人工知能の継続的な発展により、ロボットが人間に取って代わり、あらゆる労働を行うようになるのでしょうか?

[[385749]]写真はロボット最近、メディアの報道によると、人類の生存を脅かすと言われる米国の...

アマゾンのドローン配送部門の主要メンバーが目標未達成で辞任

アマゾンのドローン配送部門プライムエアで安全、飛行運用、規制業務を担当していたショーン・キャシディ氏...

...

...