솔루션: 유효한 아나그램
10997 단어 algorithmsjavajavascriptleetcode
Leetcode 문제 #242(쉬움): 유효한 아나그램
설명:
두 개의 문자열
s
및 t
가 주어지면 t
가 s
의 아나그램인지 확인하는 함수를 작성하십시오.예:
예 1:
입력:
s = "아나그램", t = "나가람"
산출:
진실
예 2:
입력:
s = "쥐", t = "자동차"
산출:
거짓
제약 조건:
아이디어:
단어의 아나그램은 기본적으로 동일한 문자를 동일한 빈도로 사용하는 다른 단어입니다. 우리는 문자와 그 빈도에만 관심이 있으므로 빈도 맵을 사용하는 것이 쉬운 선택입니다.
우리는 소문자를 다루기 때문에 더 전통적인 Map 대신 Array를 사용하고 저장을 위해 문자를 유니코드 번호(97 - 122)로 변환하여 이 기능을 더 효율적으로 만들 수 있습니다.
먼저 첫 번째 문자열 S를 반복하고 주파수 맵(fmap)에서 각 문자 코드 위치를 증가시킵니다. 그런 다음 두 번째 문자열 T를 실행하고 fmap에서 문자 코드 위치를 감소시킵니다. 0 아래로 내려가면 T에 S와 같지 않은 문자 빈도가 있다는 것을 알고 있으므로 false를 반환해야 합니다.
하지만 문제 없이 끝까지 간다면 true를 반환해야 합니다.
구현:
자바스크립트에서는 형식화된 배열 Int16Array를 사용하여 프로세스의 성능을 더욱 높일 수 있습니다.
파이썬에는 이 문제를 더욱 빠르게 만드는 문자열 함수 count()가 있습니다.
자바스크립트 코드:
var isAnagram = function(S, T) {
let len = S.length, fMap = new Int16Array(123)
if (T.length !== len) return false
for (let i = 0; i < len; i++)
fMap[S.charCodeAt(i)]++
for (let i = 0; i < len; i++)
if (--fMap[T.charCodeAt(i)] < 0) return false
return true
};
파이썬 코드:
class Solution:
def isAnagram(self, S: str, T: str) -> bool:
SMap = {c: S.count(c) for c in set(S)}
TMap = {c: T.count(c) for c in set(T)}
return SMap == TMap
자바 코드:
class Solution {
public boolean isAnagram(String S, String T) {
int len = S.length();
int[] fMap = new int[123];
if (T.length() != len) return false;
for (int i = 0; i < len; i++)
fMap[S.codePointAt(i)]++;
for (int i = 0; i < len; i++)
if (--fMap[T.codePointAt(i)] < 0) return false;
return true;
}
}
C++ 코드:
class Solution {
public:
bool isAnagram(string S, string T) {
int len = S.length();
int fMap [123] = {0};
if (T.length() != len) return false;
for (int i = 0; i < len; i++)
fMap[int(S[i])]++;
for (int i = 0; i < len; i++)
if (fMap[int(T[i])]-- == 0) return false;
return true;
}
};
Reference
이 문제에 관하여(솔루션: 유효한 아나그램), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/seanpgallivan/solution-valid-anagram-3l06텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)