1.4 하나의 함 수 를 써 서 두 문자열 이 같은 문자 로 구성 되 었 는 지 판단 한다.
1344 단어 프로그래머 면접
실질 적 으로 str 2 는 str 1 이 문자 의 출현 순 서 를 바 꾸 어 얻 은 것 입 니까?
해답:
이 문 제 는 두 가지 해법 이 있다.
법 1 정렬 법
각각 두 문자열 을 정렬 한 다음 비교 하기;
return sort(str1)==sort(str2);
법 2 계수 법
str 1 에 나타 난 중복 되 지 않 는 문 자 를 통계 하여 계수 와 총 개 수 를 str 2 와 비교 합 니 다.
str 2 를 옮 겨 다 니 며 str 2 에 중복 되 지 않 는 문자 가 나타 나 면 휴가 를 되 돌려 줍 니 다.str 2 에서 str1 에 대응 하 는 중복 되 지 않 는 문자 의 개 수 를 동시에 통계 합 니 다 numcompleted_str2,str 1 은 새로운 문자 가 나타 나 면 카운터 numunique_chars 플러스 1,str 2 는 str 1 에 대응 하 는 문자 와 같은 횟수 가 나타 나 면 카운터 numcompleted_str2 더하기 1,약과 numcompleted_str2==num_unique_chars,str 2 를 다 옮 겨 다 녔 다 면 진짜 로 돌아 갑 니 다.그렇지 않 으 면 휴가 로 돌아 갑 니 다.
bool anagram(string str1,string str2)
{
int letters[256],c;
memset(letters,0,256*sizeof(int));
int num_unique_chars=0;// str1
int num_completed_str2=0;
for (string::iterator itr=str2.begin();itr!=str2.end();itr++)
{
int c=(int)*itr;
if (letters[c]==0)
{
++num_unique_chars;
}
letters[c]++;
}
for (int i=0;i