문제 링크 - https://school.programmers.co.kr/learn/courses/30/lessons/12904
→ 효율성 1번 시간초과
import java.lang.StringBuilder;
class Solution
{
public int solution(String s)
{
int answer = 0;
int n= s.length();
String temp="";
StringBuilder sb;
loop:
for(int i=n; i>=1; i--){ //i: 펠린드롬 길이
for(int j=0; j<=n-i; j++){ // 문자열 s에서 길이가 i인 경우 전부 확인
temp = s.substring(j,j+i);
if(isPalindrome(temp)){ // 팰린드롬이면 answer에 해당 문자열 길이로 설정하고 반복문 종료하여 함수 끝내기
answer=temp.length();
break loop;
}
}
}
return answer;
}
public boolean isPalindrome(String s){ // 팰린드롬인지 확인하는 함수
int len=s.length();
for(int i=0; i<len/2; i++){ // 양 끝의 문자열 비교
if(s.charAt(i)!=s.charAt(len-1-i)) // 하나라도 같지 않으면 false 리턴
return false;
}
return true;
}
}
reverse
함수를 이용해 main문에서 확인해보았다.String
에는 reverse
함수가 없어서 StringBuilder
의 reverse()
함수 이용하였다.→ 그러나 또 효율성 1번 시간초과
import java.lang.StringBuilder;
class Solution
{
public int solution(String s)
{
int answer = 0;
int n= s.length();
String temp="";
StringBuilder sb;
loop:
for(int i=n; i>=1; i--){ //펠린드롬 길이
for(int j=0; j<=n-i; j++){
temp = s.substring(j,j+i);
sb= new StringBuilder(temp);
if(temp.equals(sb.reverse().toString())){
answer=temp.length();
break loop;
}
}
}
return answer;
}
}
s.charAt()
함수만을 이용해서 start
, end
인덱스를 이용하여 문자를 비교하였다.class Solution
{
public int solution(String s)
{
int answer =0;
int n= s.length();
loop:
for(int i=n; i>=1; i--){ //i: 펠린드롬 길이. 가장 긴 길이부터 살펴보기
for(int j=0; j<=n-i; j++){
boolean flag= true;
int st=j; //시작 인덱스
int en=j+i-1; // 끝 인덱스
while(st<en){
if(s.charAt(st)!=s.charAt(en)){
flag=false;
break;
}
st++;
en--;
}
if(flag){ // 팰린드롬이면 정답 갱신하고 반복문 중단하기
answer=i;
break loop;
}
}
}
return answer;
}
}
class Solution
{
public int solution(String s)
{
int answer =0;
int n= s.length();
loop:
for(int i=n; i>=1; i--){ //i: 펠린드롬 길이. 가장 긴 길이부터 살펴보기
for(int j=0; j<=n-i; j++){
boolean flag= true;
int st=j; //시작 인덱스
int en=j+i-1; // 끝 인덱스
while(st<en){
if(s.charAt(st)!=s.charAt(en)){
flag=false;
break;
}
st++;
en--;
}
if(flag){ // 팰린드롬이면 정답 갱신하고 반복문 중단하기
answer=i;
break loop;
}
}
}
return answer;
}
}