왼쪽 idx / 오른쪽 idx를 설정
첫 번째 while문 (조건 left < right)
1. 둘이 같으면 왼쪽은 ++ / 오른쪽은 --를 하여 중앙으로 진행
2. 둘이 다르다면, right--로 오른쪽 idx만 이동 후 count++.
3. count >= 2라면, 즉 회문이 아니라면 while문을 빠져나옵니다.
즉, 첫 번째 while문의 탈출 조건은 left >= right / count >= 2입니다.
두 번째 while문 (조건 left < right)
0. count != 0인 문자열에 대해서만 진행합니다. 즉, 확실히 회문은 아니지만 왼쪽에서 부분 회문 조건이 있는지 오른쪽에서 부문 회문 조건이 있는지 모를 문자열에 대해서 다시 한 번 검사합니다.
첫 번째 while문을 통해 확실한 회문만이 걸러집니다.
두 번째 while문을 통해 부분 회문 / 아무것도 아닌 문자열이 걸러집니다.
두 번째 while문을 통해 나온 count2와 첫 번째 while문을 통해 나온 count 중,
둘 중 하나라도 부분회문에 해당하는 1값이 있다면, 그 문자열은 부분회문입니다.
왼쪽에 부분회문 조건값이 존재했다면, 예를 들어 xabba일 경우, 첫 번째 while문을 통해서는
2가 나오지만 두 번째 while문에서는 1이 나옵니다.
package test;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main {
public static void main(String[] args) throws NumberFormatException, IOException {
BufferedReader bfr = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(bfr.readLine());
for (int i = 0; i < n; i++) {
String tmp = bfr.readLine();
int left = 0;
int right = tmp.length() - 1;
int count = 0;
int count2 = 0;
while (left < right) {
if (tmp.charAt(left) == tmp.charAt(right)) {
left++;
right--;
} else {
right--;
count++;
}
if(count >= 2)
break;
}
if (count != 0) {
left = 0;
right = tmp.length() - 1;
while (left < right) {
if (tmp.charAt(left) == tmp.charAt(right)) {
left++;
right--;
} else {
left++;
count2++;
}
if(count2 >= 2)
break;
}
}
if (count == 0)
System.out.println(0);
else if (count == 1 || count2 == 1)
System.out.println(1);
else
System.out.println(2);
}
bfr.close();
}
}