바 오즈 Leetcode 솔루션 (205) : 동형 문자열

문제 설명 

두 개의 문자열을 감안할 때  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 또는 문자열의 길이를하고 우리가 사용하는 설정

 

참조

추천

출처www.cnblogs.com/baozitraining/p/11112125.html