매일 알고리즘 시리즈 배우 기 (17) (한 문자열 에서 첫 번 째 로 한 번 만 나타 나 는 문 자 를 찾 습 니 다)
한 문자열 에서 첫 번 째 로 한 번 만 나타 나 는 문 자 를 찾 습 니 다. 예 를 들 어 abaccdeff 를 입력 하면 b 를 출력 합 니 다. (이 문 제 는 2006 년 구 글 의 필기시험 문제 입 니 다)
사고방식 1:
제목 은 문자 가 나타 나 는 횟수 와 관련 되 기 때문에 모든 문자 가 이 문자열 에 나타 나 는 횟수 를 통계 할 수 있 습 니 다. 이러한 목적 을 달성 하려 면 Hash 표를 이용 하여 이러한 문 제 를 풀 수 있 습 니 다. 모든 char 를 수용 할 수 있 는 배열 을 용기 로 하고 해당 하 는 문자 에 대응 하 는 ASCLL 코드 값 을 다음 표 로 매 핑 할 수 있 습 니 다.이렇게 하면 우 리 는 두 번 을 옮 겨 다 니 면 첫 번 째 로 한 번 만 나타 난 문 자 를 찾 을 수 있다.현재 의 문 제 는 배열 이 얼마나 정의 해 야 하 느 냐 하 는 것 이다.문자 (char) 는 길이 가 8 인 데이터 형식 이기 때문에 모두 256 가지 가능성 이 있 습 니 다. 그래서 우 리 는 길이 가 256 인 배열 을 만 들 었 습 니 다. 모든 자 모 는 ASCII 코드 값 에 따라 배열 의 아래 표 시 된 배열 의 대응 항목 으로 하고 배열 에 저 장 된 것 은 모든 문자 가 대응 하 는 횟수 입 니 다.
코드 는 다음 과 같 습 니 다:
#include "stdafx.h"
#include <assert.h>
#define ALL_CHAR_COUNT 256
/*----------------------------
.
Copyright by yuucyf 2011.07.21
-----------------------------*/
TCHAR FindFristAppearChar(TCHAR* lptszStr)
{
assert(NULL != lptszStr);
TCHAR atszHashMap[ALL_CHAR_COUNT + 1] = {0};
int i32Len = _tcslen(lptszStr);
for (int i32I = 0; i32I < i32Len; i32I++)
atszHashMap[*(lptszStr+i32I)]++;
for (int i32J = 0; i32J < i32Len; i32J++)
{
if (atszHashMap[*(lptszStr + i32J)] == 1)
return *(lptszStr+i32J);
}
return 0;
}
int _tmain(int argc, _TCHAR* argv[])
{
TCHAR* lptszStr = _T("abaccdeff");
_tprintf(_T("First appear char is %c.
"), FindFristAppearChar(lptszStr));
return 0;
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
【Codility Lesson3】FrogJmpA small frog wants to get to the other side of the road. The frog is currently located at position X and wants to get to...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.