** 주의할 것
맨 앞 맨 뒤 인덱스를 비교해주는 경우, str.length()이후 - 1 해주기.
아니면 outofbound exception발생 (당연하지만. 한 번 더 생각할 것)
if(!(str.charAt(i) == str.charAt(str.length()-1-i))) answer = "NO";
* 설명
앞에서 읽을 때나 뒤에서 읽을 때나 같은 문자열을 회문 문자열이라고 합니다.
문자열이 입력되면 해당 문자열이 회문 문자열이면 "YES", 회문 문자열이 아니면
“NO"를 출력하는 프로그램을 작성하세요.
단, 회문을 검사할 때 대소문자를 구분하지 않습니다.
* 입력
첫 줄에 길이 100을 넘지 않는 공백이 없는 문자열이 주어집니다.
* 출력
첫 번째 줄에 회문 문자열인지의 결과를 YES 또는 NO로 출력합니다.
StringBuilder.reverse이용
public String solution(String str) {
String answer = "";
str = str.toUpperCase(); //equalsIgnoreCase 사용 안할 시
String strReverse = new StringBuilder(str).reverse().toString();
if(str.equals(strReverse)) answer = "YES";
else answer = "NO";
return answer;
}
알고리즘 이용
public String solution(String str){
String answer = "YES";
str = str.toUpperCase();
for(int i = 0; i < str.length()/2; i++){
if(!(str.charAt(i) == str.charAt(str.length()-1-i))) return "NO"
// answer ="NO"를 해주지 않아도 바로 NO를 리턴해버리기
}
}
* 설명
앞에서 읽을 때나 뒤에서 읽을 때나 같은 문자열을 팰린드롬이라고 합니다.
문자열이 입력되면 해당 문자열이 팰린드롬이면 "YES", 아니면 “NO"를 출력하는 프로그램을
작성하세요.
단 회문을 검사할 때 알파벳만 가지고 회문을 검사하며, 대소문자를 구분하지 않습니다.
알파벳 이외의 문자들의 무시합니다.
* 입력
첫 줄에 길이 100을 넘지 않는 공백이 없는 문자열이 주어집니다.
* 출력
첫 번째 줄에 팰린드롬인지의 결과를 YES 또는 NO로 출력합니다.
나의 풀이
StringBuilder객체를 만든 후 isAlphabetic를 이용해, 맞으면 추가해준 후 reverse()를 통해 비교.
다만 주의할 점은, StringBuilder에는 문자열의 내용을 직접 비교하는 메소드를 제공하지 않기때문에 toString으로 바꿔준 후, 재정의 되어있는 String method를 사용한다.
public String solution(String str) {
String answer = "";
StringBuilder strbd = new StringBuilder();
for(int i = 0; i < str.length(); i++){
if(Character.isAlphabetic(str.charAt(i))){
strbd.append(str.charAt(i));
}
}
if(strbd.toString().equalsIgnoreCase((strbd.reverse().toString()))){
answer = "YES";
}
else answer = "NO";
return answer;
}
replaceAll 이용
public String solution(String str) {
String answer = "NO";
str = str.toUpperCase().replaceAll("^[A-Z]", "");
String tmp = new StringBuilder(str).reverse().toString();
if(str.equals(tmp)) answer = "YES";
return answer;
}