1
저는 인터뷰 질문을 준비하는 초보자입니다. 최근에 문자열을 반복하는 것에 대한 질문이 있습니다.이동 포인터 VS. 그냥 문자열을 반복합니다
"Valid Palindrome"과 같은 질문을 처리 할 때 일반적으로 두 가지 방법으로 문제를 해결할 수 있습니다.
우리가 목표 문자 찾을 때까지 우리는 하나가 포인터를 계속 업데이트 :
s = s.toLowerCase();
int lo = 0;
int hi = s.length() - 1;
while(hi > lo){
while(lo < hi && !Character.isLetterOrDigit(s.charAt(lo))) lo ++;
while(hi > lo && !Character.isLetterOrDigit(s.charAt(hi))) hi --;
if(s.charAt(lo) != s.charAt(hi)) return false;
lo ++;
hi --;
}
return true;
하거나 (leetcode 토론에서) 문자열의 반복 :
int head = 0, tail = s.length() - 1;
char cHead, cTail;
while(head <= tail) {
cHead = s.charAt(head);
cTail = s.charAt(tail);
if (!Character.isLetterOrDigit(cHead)) {
head++;
} else if(!Character.isLetterOrDigit(cTail)) {
tail--;
} else {
if (Character.toLowerCase(cHead) != Character.toLowerCase(cTail)) {
return false;
}
head++;
tail--;
}
}
return true;
을 내가 더 나은 어떤 방법을 모르겠습니다을 큰 O 분석의 용어와 인터뷰 중에 사용할 분석법은 무엇입니까?
미리 감사드립니다.
"big-O analysis"는 "얼마나 효율적입니까?"와 동의어로 사용하지 마십시오. 두 알고리즘 모두 문자열의 길이에 비례하므로 'O (n)'입니다. 하나의 알고리즘은 각 루프 반복에서 더 빠르거나 고정 오버 헤드가 크거나 작을 수 있지만 이러한 차이는 big-O 분석의 일부가 아닙니다. – ajb
고마워, 나는 그걸 명심 할거야. 메소드에 계단식 루프가 있어도 첫 번째 메소드의 시간 복잡도가 여전히 O (n)인지 확인하고 싶습니까? 그것은 내부 루프 때문에 포인터를 업데이트하는 것입니까? – Willll