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

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

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

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

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

ブログ    
ブログ    
ブログ    
ブログ    
ブログ    

推薦する

...

言語モデルの氷山の一角: 微調整は不要、AI21 Labs は凍結モデルの未開発の可能性を探る

現在、特定の NLP タスクのパフォーマンスを最適化するための最善のアプローチは、事前トレーニング済...

検証可能な AI に向けて: 形式手法の 5 つの課題

人工知能は、学習、問題解決、合理的な思考や行動など、知能と直感的に関連付けられる機能を含め、人間の知...

...

「顔スキャン」はもはやジョークではなく、マスクを着用していても機能します

[51CTO.comからのオリジナル記事] 近年、人工知能、ビッグデータ、クラウドコンピューティング...

毎日 12 時に出勤し、ガールフレンドと過ごすために定時に退勤するプログラマーである私が、なぜいつも残業するのでしょうか。 !

社内で髪の多いプログラマートップ3の1人として、私はいつも髪に頼って残業しています。若い人たち、なぜ...

すべてがジョジョになる:このGANはマスクを人間ではないものにする

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

時系列予測のための 5 つのディープラーニング モデルの比較

マクリダキス M-コンペティション シリーズ (M4 および M5 と呼ばれます) は、それぞれ 2...

...

...

...

疫病と戦うための新しい技術!北京で3Dプリント/コピー防護マスクの開発に成功

流行は激しく、科学技術界は全力で流行と戦っています。北京化工大学の楊衛民教授は2月25日、21世紀ビ...

Google AI、眼球スキャンから心臓病リスクを予測可能

グーグルと、同じくアルファベットグループの健康関連子会社であるベリリー・ライフ・サイエンシズが共同で...

エッジAIとクラウドAIのバランスを見つける

エッジ AI により、ローカライズされた処理を通じてリアルタイムの機械学習が可能になり、即時のデータ...