해당 문제는 문자열의 앞과 뒤에서 글자들을 비교하여 풀 수 있다.
앞과 뒤에서 빠르게 문자를 가져오기위해 투 포인터를 사용하여 반복문을 통해 쉽게 구할 수 있다.
문제에서 입력이 들어오는 데이터는 String s 하나지만 위치 관리를 위해 필요한 변수를 미리 선언해야합니다.
startIndex
endIndex
processedString
String processedString = s.replaceAll("[^a-zA-Z0-9]", "").toLowerCase();
// 정규 표현식을 사용하여 a~z, A~Z, 0~9까지만 데이터를 남겨둠.
int startIndex = 0;
int endIndex = processedString.length() - 1; // Index는 길이 - 1
비교를 시작할 위치를 정했고, 이제 반복문을 통해 해당 위치의 값을 비교한다.
단, 서로의 위치가 교차되지 않도록 조건을 걸어준다.
for(;startIndex<endIndex;startIndex++,endIndex--){
if(processedString.charAt(startIndex) != processedString.charAt(endIndex)){
return false;
}
}
return true;
class Solution {
public boolean isPalindrome(String s) {
String processedString = s.replaceAll("[^a-zA-Z0-9]", "").toLowerCase();
int startIndex = 0;
int endIndex = processedString.length() - 1;
for(;startIndex<endIndex;startIndex++,endIndex--){
if(processedString.charAt(startIndex) != processedString.charAt(endIndex)){
return false;
}
}
return true;
}
}
시간 복잡도
processedString
변수에 저장한다. 이것의 시간 복잡도는 입력 문자열의 길이인 O(n)공간 복잡도
processedString
변수가 변환한 string 만큼의 데이터를 저장하기 때문에 O(n)의 공간 복잡도를 가진다.다음과 같은 점수를 기록했다.
공간 복잡도가 O(1)을 가지기 위해서는 변환 후 저장하지 않고 해당 과정을 수행하면 된다.