슬 래 그 기초: Hawtein 학 Cracking the coding 인터뷰 비교 (3)

글 쓴 이: Hawtein
출처:http://hawstein.com/posts/1.4.html
성명: 본 고 는 다음 과 같은 협 의 를 통 해 권한 을 부여 합 니 다. 자유 전재 - 비 상업 용 - 비 파생 - 서명 유지 | Creative Commons BY - NC - ND 3.0, 전재 작가 및 출처 를 밝 혀 주 십시오.
Q1.7  함수 하 나 를 써 서 MxN 의 행렬 을 처리 합 니 다. 행렬 의 어떤 요소 가 0 이면 줄 과 열 을 0 으로 설정 합 니 다.
Hawtein 이 쓴 방법 은:
void zero(int **a, int m, int n){
    bool row[m], col[n];    
    memset(row, false, sizeof(row));
    memset(col, false, sizeof(col)); 
    for(int i=0; i

이렇게 쓰 면 a 는 2 급 지침 입 니 다. main () 함 수 를 쓰 지 않 았 기 때문에 그 가 어떻게 데 이 터 를 전달 하 는 지 잘 모 르 겠 습 니 다.나 는 배열 이름 을 직접 전달 하려 고 했 기 때문에 나 는 그의 함수 형 삼 을 다음 과 같이 바 꾸 었 다.
void zero(int (*a)[3], int m, int n)

이것 도 내 가 먼저 열 수 를 고정 시 켜 야 하기 때문에 이것 도 통용 되 지 않 는 다.그래서 어떻게 해 야 할 지 모 르 겠 어 요...
또한 배열 지침, 포인터 배열, 2 차원 배열 간 의 관 계 를 복습 하 였 으 며, 상세 한 것 은 라 는 책 을 참고 하여 매우 상세 하 게 소개 하 였 으 며, 이해 하기 도 하 였 다.
Q1.9
isSubstring 함수 가 있다 고 가정 하면 다른 문자열 의 하위 문자열 인지 확인 할 수 있 습 니 다.s1 과 s2 를 보 여 줍 니 다. isSubstring 을 한 번 만 사용 하면 s2 가 s1 의 회전 문자열 인지 판단 할 수 있 습 니 다. 코드 를 쓰 십시오.회전 문자열: "waterbottle"은 "erbottlewat"의 회전 문자열 입 니 다.
여기 서 작 가 는 매우 절묘 한 해답 을 내 놓 았 다.
제목 은 isSubstring 함 수 를 한 번 사용 하면 s2 가 s1 의 회전 문자열 인지 판단 할 수 있 습 니 다. 원본 문자열 s1 과 s2 에서 직접 시작 하면 안 됩 니 다. 하위 문자열 관계 가 전혀 존재 하지 않 기 때 문 입 니 다.문 자 를 계속 회전 시 킨 다음 에 isSubstring 을 호출 하려 면 여러 번 의 isSubstring 을 호출 해 야 합 니 다.그리고 회전 문 자 를 통 해 다시 판단 하면 등호 로 직접 판단 할 수 있 고 isSubstring 을 사용 할 수 없습니다.
그렇다면 원본 문자열 을 바 꾸 는 것 도 고려 해 야 한다.a 꼬치 가 b 꼬치 의 하위 꼬치 인지 판단 하려 면 일반적인 상황 에서 b 꼬치 의 길이 가 a 꼬치 보다 크 고 길이 가 같 으 면 똑 같은 꼬치 인지 아 닌 지 를 직접 판단 합 니 다.우 리 는 꼬치 s1 을 길 게 한 다음 에 isSubstring 을 호출 하여 s2 가 s1 이 길 어 진 후의 하위 문자열 인지 아 닌 지 를 판단 할 수 있 습 니 다. 만약 그렇다면 s2 가 s1 의 회전 문자열 임 을 알 수 있 습 니 다.s1 어떻게 길 어 지지?s1 + s1 또는 s1 + s2 뿐만 아니 라 s2 는 반드시 s1 + s2 의 하위 꼬치 이기 때문에 이렇게 하 는 것 은 아무런 의미 가 없다.s1 + s1 은?우 리 는 위의 예 에 대해 토론 을 진행한다. s1 = waterbottle, s2 = erbottlewat. 는:
s1 + s1 = waterbottlewaterbottle

s1 + s1 은 s1 의 모든 문 자 를 한 번 씩 회전 시 키 는 동시에 원래 문 자 를 움 직 이지 않 는 다 는 것 을 쉽게 알 수 있다.예 를 들 어 워 터 병 이 오른쪽으로 두 개의 메 모 를 돌 리 는 것 은 'terbottlewa' 일 것 이다. 그러나 원래 의 문자 가 움 직 이지 않 는 다 면 우 리 는 워 터 병 tlewa 를 얻 을 수 있 고 terbottlewa 는 워 터 병 tlewa 의 하위 꼬치 일 것 이다. 워 터 병 tlewa 는 terbottlewa 를 바탕 으로 원래 의 문자 가 움 직 이지 않 는 제한 을 추가 하기 때문이다.따라서 s1 + s1 은 s1 의 모든 회전 문자열 을 포함 합 니 다. s2 가 s1 + s1 의 하위 문자열 이 라면 당연히 s1 의 회전 문자열 입 니 다.

좋은 웹페이지 즐겨찾기