1. 질문의 의미를 이해 :
두 문자열을 주어진, 그래서 그들은 동형 있는지 여부를 확인 (동형).
동형 : 문자열 S의 문자가 문자열 t을 얻기 위해 대체 할 수있는 경우 두 개의 문자열은 동형이다.
2. 문제 해결 키워드 : 해시 맵
1) 먼저, 순서대로 문자열 문자열 S 및 t는 각각 숯불에 매핑된다 별도로 기록되는 대응 t에서의 S의 문자, 문자 값에 대응하는 키 해시 맵을 구축한다.
예를 들어, "종이"와 "제목"을 위해 :
키 | 발
P - 값이 맵에 존재하는 것처럼, 만약 그렇다면, false를 돌려 t를하면 키가 맵에 존재하지 않는> t p를 확인; 하지 않을 경우, 값으로 키와 t으로 페이지를 추가합니다.
A - 키가 맵에 존재하지 않는 값이 맵에 존재하는 것처럼 내가, 경우에하는 것은 예, false를 반환하는 경우> 나는 확인; 하지 않을 경우, 나는 값 키로 페이지를 추가합니다.
p는 -> 키로 t p를 이미 맵에 존재했다. 해당 값이 t에 해당하는 경우 예, 건너 뛰면하지 않을 경우 false를 반환, 확인합니다.
전자 -> 키를 값으로 난 맵에 존재하는 경우 예, false를 반환하는 경우, 확인,지도에 존재하지 않는 리터 전자; 하지 않으면 것은 값으로 키와 L로 전자를 추가합니다.
R -> 키를 값으로 전자지도에 존재하는 경우 예, FALS을 반환하는 경우, 확인,지도에 존재하지 않는 전자 R; 하지 않으면 것은 값으로 키와 전자로 R을 추가합니다.
끝난.
3. 참고 : 몇 번 더 연습 할 수 있습니다. .
4. 자바代 클래스 솔루션 {
공공 부울 isIsomorphic (S 문자열, 문자열 T) { 지도 <문자, 문자> = charStoCharT 새로운 새로운 해시 맵 '<> (); INT sLength = s.length (); INT tlength = t.length (); // 기본 케이스 : 만약 근본적으로 다른 두 개의 길이 스트링, // 동등 할 필요가없는, 콘트라스트의 염기성 조건시의 길이의 두 개의 동일한 문자열. IF (! sLength = tlength) { 반환 false로는 ; } 에 대해 ( int로 , 나는 <sLength, I = 0 나는 ++가 ) { 숯불 Froms = s.charAt (I), 문자= fromt ; t.charAt (I) IF (! {charStoCharT.containsKey (Froms)) // 수있다 1 : 숯은 S 맵 아닌 경우, 제는 이미 문자 대응 여부를 결정 내지 t // 에서 내부지도. 당신이 이미있는 경우 직접 false를 돌려줍니다. 그렇지 않은 경우, 새로운 맵을 작성합니다. IF (charStoCharT.containsValue는 () fromt) { 반환 false로 ; } 다른 사람이 { (fromt, Froms) charStoCharT.put가; } } 다른 {
// 가능한 2 : 맵 이미 s의 문자는, 그 시간에 해당한다 값은 현재 t에서 현재를 볼 수행, 그렇다면, 건너 뛰기, 그렇지 않은 경우 false를 반환합니다.되지 않은 경우 (charStoCharT.get은 (Froms)! = T에서) 반환 거짓에 , 다른 { 계속 ; } } 반환 true로를 ; // true가 돌려로 부드럽게 마무리 }