[LeetCode] 205.同形文字列同形文字列(簡単)(JAVA)
件名アドレス:https://leetcode.com/problems/isomorphic-strings/
タイトル説明:
2つの文字列sとtが与えられた場合、それらが同型であるかどうかを判別します。
sの文字を置き換えてtを取得できる場合、2つの文字列は同型です。
文字の順序を維持しながら、出現するすべての文字を別の文字に置き換える必要があります。2つのキャラクターを同じキャラクターにマップすることはできませんが、キャラクターはそれ自体にマップすることができます。
例1:
Input: s = "egg", t = "add"
Output: true
例2:
Input: s = "foo", t = "bar"
Output: false
例3:
Input: s = "paper", t = "title"
Output: true
注:
sとtの両方の長さが同じであると想定できます。
一般的なアイデア
2つの文字列sとtが与えられた場合、それらが同型であるかどうかを判別します。
sの文字を置き換えてtを取得できる場合、2つの文字列は同型です。
文字の順序を維持しながら、出現するすべての文字を別の文字に置き換える必要があります。2つの文字を同じ文字にマップすることはできませんが、文字をそれ自体にマップすることはできます。
説明:
sとtの長さが同じであると想定できます。
問題解決方法
- マップを使用して既存のマッピングを記録する
- 次回は、最初にs.charAt(i)が記録されたマッピングと同じであるかどうか、およびt.charAt(i)がすでにマッピングに含まれているかどうかを判断する必要があります(多対1にすることはできないため、つまり、 、b insをtAにマッピングすることはできません)
class Solution {
public boolean isIsomorphic(String s, String t) {
if (s.length() != t.length()) return false;
Map<Character, Character> map = new HashMap<>();
for (int i = 0; i < s.length(); i++) {
char tempS = s.charAt(i);
char tempT = t.charAt(i);
Character pre = map.get(tempS);
if (pre == null && map.containsValue(tempT)) return false;
if (pre != null && pre != tempT) return false;
map.put(tempS, tempT);
}
return true;
}
}
実行時間:14ミリ秒、Javaユーザーの38.16%を打ち負かす
メモリ消費量:38.7 MB、Javaユーザーの62.40%を打ち負かす