js 는 입력 문자열 이 답장 인지 여 부 를 판단 하 는 함 수 를 실현 합 니 다 (기초 면접 문제 4)
2320 단어 알고리즘
먼저 이 문 제 를 푸 는 가장 중요 한 문 제 는 회 문 이라는 개념 을 이해 하 는 것 이다. 회 문의 정 의 는 똑 같은 어휘 나 문장 을 다음 글 에서 위 치 를 바 꾸 거나 뒤 바 꾸 어 수미 회 환 의 정 취 를 나타 내 는 것 을 회 문 이 라 고도 부 르 고 회 환 이 라 고도 부른다.
분석:
1) 답문 의 개념 을 알 게 된 이상 우 리 는 이 문 제 를 옮 겨 다 녀 야 한 다 는 것 을 분명히 알 고 답문 중간 에 옮 겨 다 니 는 그 문자 의 대응 색인 도 알 면 된다.
2) 그 다음 에 앞의 반 을 옮 겨 다 니 는 문자 와 뒤에 옮 겨 다 니 는 반 문 자 를 비교 하고 똑 같 으 면 답장 이다.다 르 면 답장 이 아 닙 니 다.
3) 그런데 도대체 앞의 문자 와 뒤의 문 자 를 어떻게 옮 겨 다 니 는 것 을 실현 해 야 합 니까?이것 은 이 문제 의 주요 사고 방향 이다.
4) 옮 겨 다 니 면 색인 이 0 으로 시 작 됩 니 다. 즉, 우리 가 자주 사용 하 는 for 순환 입 니 다. i = 0 을 정의 한 다음 에 이 i 가 옮 겨 다 니 는 길 이 는 문자열 의 절반 입 니 다.이 럴 때 입력 한 문자열 이 홀수 인지 짝수 인지, 짝수 가 해결 되 는 지 분석 해 야 합 니 다. 그러면 홀수 개 는 요?
5) 잘 해결 되 었 습 니 다. 홀수 개 는 주로 + 1 의 절반 을 옮 겨 다 니 는 것 입 니 다. 예 를 들 어 입력 문자열 이 7 개 라면 우리 가 원래 옮 겨 다 니 던 i 값 은 최종 적 으로 3, 즉 중간 에 있 는 것, 즉 네 번 째 입 니 다. 마침 (7 + 1) / 2 = 4 입 니 다.
6) 그럼 또 동창 회 에서 의문 이 생 겼 군요. 그럼 짝수 는 요?예 를 들 어 입력 문자열 이 8 개 있 는데 도 (str. length + 1) / 2 형식 을 사용 해 야 합 니까?더 좋 은 성능 을 위해 같은 형식 으로 쓰 는 것 이 좋다 는 대답 이다.그럼 (8 + 1) / 2 는 4.5 기다 리 는 거 아니에요?이거 어떻게 해결 해요?parseInt 로 정리 하 는 것 과 다른 정리 방식 은 모두 가능 하지만, 반드시 주의해 야 하 며, 위로 정리 하고 반올림 해 서 는 안 된다.
7) 뒤의 반, 뒤의 반 을 옮 겨 다 니 는 색인 은 어떻게 실현 해 야 합 니까?앞 반 과 뒤 반 이 같다 면 옮 겨 다 니 는 방식 은 이 럴 것 이다.예 를 들 어 입력 문자열 의 길이 가 12 이면 옮 겨 다 닐 때 i = 0 을 옮 겨 다 닐 때 문자열 은 i = 11 을 옮 겨 다 닐 때 문자열 과 같 아야 합 니 다. i = 1 을 옮 겨 다 닐 때 문자열 은 i = 10 의 문자열 과 같 습 니 다.
8) 그럼 어떻게 이 루어 지 는 거 야?우 리 는 두 개의 i 를 더 한 다음 에 1 을 더 하면 문자열 의 총 길이 라 는 것 을 발견 할 수 있다. 그러면 먼저 이렇게 쓴 다음 에 정리 할 수 있다. i = 0 시, str [i] = str [str. length - 1].i = 1 시, str [i] = str [str. length - 1 - 1];i = 2 시, str [i] = str [str. length - 1 - 2].그러면 전체적인 실현 은 이렇게 해 야 한다. str [i] = str [str. length - 1 - i]
코드 구현 은 다음 과 같 습 니 다.
function isPalindrome(str){
if (typeof str !== 'string' || str.constructor !== String) {
return false;
}
var len = parseInt((str.length+1)/2);
for(var i=0; i
이 문 제 를 실현 하려 면 알고리즘 을 아 는 사람 이 신속하게 방법 을 쓸 수 있 지만 이런 학습 은 초급 자 에 게 적합 하기 때문에 초급 자 들 이 이 문 제 를 풀 때 펜 으로 초고 지 에 자신의 사고 와 방법 을 쓰 는 것 이 좋 습 니 다. 이것 은 자신의 능력 을 증명 하 는 방식 이자 자신의 논 리 를 단련 하 는 것 입 니 다.
제목 은 위 챗 공식 번호 에서 유래 했다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 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에 따라 라이센스가 부여됩니다.