문제 설명
두 개의 문자열을 감안할 때 S 와 T 가 동형 경우, 결정한다.
의 문자 경우 두 문자열은 동형 의이 얻을 교체 할 수 있습니다 t을 .
문자의 순서를 유지하면서 캐릭터의 모든 사건은 다른 문자로 교체해야합니다. 두 개의 문자는 같은 문자에 매핑하지 않을 수 있지만, 캐릭터 자체에 매핑 할 수 있습니다.
예 1 :
입력 : S = "egg",
t = "add"
출력 : 사실
예 2 :
입력 : S = "foo",
t = "bar"
출력 : 거짓
예 3 :
입력 : S = "paper",
t = "title"
출력 : 사실
노트 :
둘 다 가정 할 수 들 과 t은 같은 길이를 갖는다.
문제 링크
비디오 자습서
여기 상세 비디오 자습서를 찾을 수 있습니다
- 유튜브
- 역 B
생각 프로세스
매우 유사한 비교적 간단 문제, 워드 패턴 . 우리가 할 일은 또한의 (b에서 동일한 문자에 매핑해야에는 두 개의 서로 다른 문자가 의미가없는)가 전단 사 함수 매핑을 유지하기 위해 필요 문자열 B에 문자열 A에서 하나의 매핑에 하나를 확인하다
사용 전단 사 함수 매핑
a와 b에서 하나의 문자를 확인합니다. A의 문자가 전에 보지되지 않은 경우이 문자 사이에 하나의 매핑에 하나 그래서 나중에이 문자를 다시 볼 경우 B의 문자를 만들고, 그것을 다른 우리가 false를 반환, b에 매핑 할 수 있습니다. 또한, B의 문자가 다른 문자로 매핑되지 않습니다 있는지 확인해야합니다.
비디오 INT에 대한 설명 |
솔루션
1 공용 부울 isIsomorphic (문자열 A, 문자열 b) { 이 경우 (a ==의 널 || B == 널 || a.length ()! = b.length를 ()) { 3 창 거짓 ; 4 } 5 지도 <문자, 캐릭터> 룩업 = 새 의 HashMap <> (); 6 세트 <문자> = dupSet 새로운 HashSet의 <> (); (7) (8) 에 대해 ( int로 ; 나는 a.length ()을 <; I = 0 난 ++ ) { 9 숯 C1 = a.charAt (Ⅰ); 10 문자C2 = b.charAt (I); (11) (12) 의 경우 (lookup.containsKey (C1)) { 13 일 경우 (C2! = {lookup.get (C1)) 14 리턴 거짓 ; 15 } 16 } 다른 { 17 lookup.put (C1, C2); 18 // 같은 C2 상이한 c1s 맵을 방지하기 위해이, 그것은 전단 사 함수 매핑되어야한다 (19) 의 경우 (dupSet.contains (C2)) { 20 반환 거짓 ; 21 } 22 dupSet.add (C2); (23) } 24 } 25 반환 사실 ; 26 }
시간 복잡도 : O (N)는 N 문자열 A 또는 B의 문자열 길이
공간 복잡도 : O (N)는, N은 해시 맵 때문에 b를 문자열 a 또는 문자열의 길이를하고 우리가 사용하는 설정