Programming/LeetCode
[Dart] 205. Isomorphic Strings
Meezzi
2025. 3. 31. 10:45
728x90
1. 문제
2. 요구 사항
1) 두 개의 문자열 s와 t가 주어졌을 때 두 문자열이 동형인지 판별한다.
2) 동형 문자열은 s 문자열의 문자 하나가 t 문자열의 문자로 일대일 매핑 되는 것이다.
3) 같은 문자는 같은 문자로 매핑되어야 하며, 다른 문자로 바뀌어서는 안된다.
3. 핵심 아이디어
1) 각 문자를 ASCII 값으로 대체 후 비교
각 문자열의 문자를 정수(ASCII) 값으로 변환하여,
두 개의 List<int> 배열을 만들어 각 문자의 최근 등장 위치를 저장한다.
문자가 이전에 등장한 위치가 서로 다르면, 1대1 매핑이 되지 않은 것이므로 false를 반환한다.
반복문을 모두 통과하면 두 문자열은 동형 관계이므로 true를 반환한다.
2) 코드
class Solution {
bool isIsomorphic(String s, String t) {
// ASCII 문자 기준으로 각 문자의 최근 등장 위치를 저장할 배열 (128은 ASCII 문자 개수)
List<int> mapS = List.filled(128, -1); // s의 문자 대응
List<int> mapT = List.filled(128, -1); // t의 문자 대응
for (int i = 0; i < s.length; i++) {
// 현재 문자를 정수(ASCII)로 변환
int charS = s.codeUnitAt(i);
int charT = t.codeUnitAt(i);
// 두 문자열의 현재 문자의 이전 등장 위치가 다르면 false
if (mapS[charS] != mapT[charT]) return false;
// 현재 문자의 등장 위치를 기록
mapS[charS] = i;
mapT[charT] = i;
}
return true;
}
}
- 시간 복잡도 : O(n)
- 공간 복잡도 : O(1)
728x90