문자열을 뒤집는 문제를 풀던 중
어떤게 가장 좋은 방법인지 궁금했다..
그래서 최대한 다양하게 알아보았다
import java.util.*;
class Main {
public static void main(String[] args) {
String input = "abcde";
System.out.println(reverseUseStack(input.toCharArray()));
}
private static String reverseUseStack(char [] stringToCharArray) {
Stack<Character> stack = new Stack<>();
for (int i = 0; i < stringToCharArray.length; i++) {
stack.push(stringToCharArray[i]);
}
for (int i = 0; i < stringToCharArray.length; i++) {
stringToCharArray[i] = stack.pop();
}
return stringToCharArray.toString();
}
import java.io.*;
class Main {
public static void main(String[] args) {
}
String input = "abcde";
reverseString(input);
}
private static void reverseString(String string) {
int size = string.length();
char []ch = string.toCharArray();
char temp;
for (int i = 0; j = n-1; i<j; i++; j--) {
temp = ch[i];
ch[i] = ch[j];
ch[j] = temp;
}
System.out.println(ch);
}
}
import java.io.*;
class Main {
public static void main(String[] args) {
char[] input = "abcde".toCharArray();
recursiveReverse(input, 0);
System.out.println(input.toString());
}
private static void recursiveReverse(char[] string, int index) {
int size = string.length;
if (index == size / 2) return;
swap(string, index, size-index-1);
recursiveReverse(string, index+1);
}
private static void swap(char []arr, int index, int next) {
char temp = arr[index];
arr[index] = arr[next];
arr[next] = temp;
}
}
import java.util.*;
import java.io.*;
class Main {
public static void main(String[] args) {
String string = "abcde";
StringBuffer stringBuffer = new StringBuffer(string);
stringBuffer.reverse();
System.out.println(stringBuffer.toString());
}
}
회문 문자열
설명
앞에서 읽을 때나 뒤에서 읽을 때나 같은 문자열을 회문 문자열이라고 합니다.
문자열이 입력되면 해당 문자열이 회문 문자열이면 "YES", 회문 문자열이 아니면 “NO"를 출력하는 프로그램을 작성하세요.
단 회문을 검사할 때 대소문자를 구분하지 않습니다.
입력
첫 줄에 길이 100을 넘지 않는 공백이 없는 문자열이 주어집니다.
출력
첫 번째 줄에 회문 문자열인지의 결과를 YES 또는 NO로 출력합니다.
예시 입력 1
gooG
예시 출력 1
YES
import java.util.*;
import java.io.*;
// 기존 문자열 == 뒤집은 문자열 검사
//
// 일치할 경우 'yes', 아닌 경우 'no' 출력
// 대소문자 구분 없이 equals() 기능 작성
// toUpperCase || toLowerCase 일치 여부도 검사하는 것으로 기능 작성
public class Main {
public static void main(String[] args){
Scanner scanner = new Scanner(System.in);
String input = scanner.nextLine();
StringBuffer stringBuffer = new StringBuffer(input);
stringBuffer.reverse();
// char[] readLine = input.toCharArray();
//recursiveReverse(readLine, 0);
String reverse = stringBuffer.toString();
if (input.equalsIgnoreCase(reverse)) {
System.out.println("YES");
}
System.out.println("NO");
return ;
}
private static void recursiveReverse(char[] readLine, int index) {
int size = readLine.length;
if (index == size / 2) {
return;
}
swap(readLine, index, size-index-1);
recursiveReverse(readLine, index+1);
}
private static void swap(char []readLine, int index, int next) {
char temp = readLine[index];
readLine[index] = readLine[next];
readLine[next] = temp;
}
}
import java.util.*;
// 기존 문자열 == 뒤집은 문자열 검사
//
// 일치할 경우 'yes' 출력, 아닌 경우 'no' 출력 후 종료
// 대소문자 구분 없이 equals() 기능 작성
public class Main {
public static void main(String[] args){
Scanner scanner = new Scanner(System.in);
String input = scanner.nextLine();
StringBuilder stringBuilder = new StringBuilder(input);
String reverse = stringBuilder.reverse()
.toString();
if (!isValid(input, reverse)) {
System.out.println("NO");
return;
}
System.out.println("YES");
return ;
}
private static boolean isValid(String input, String reverse) {
return input.equalsIgnoreCase(reverse);
}
}