Algorithm/기타(기업등)

[CodingBat/java] sameEnds

IagreeBUT 2021. 10. 14. 17:59
728x90

구분

  • String-3

 

문제

 

시작과 끝에 둘다 등장하는 가장 긴 string

 

 

https://codingbat.com/prob/p131516

 

CodingBat Java String-3 sameEnds

Given a string, return the longest substring that appears at both the beginning and end of the string without overlapping. For example, sameEnds("abXab") is "ab".

codingbat.com

 

 

 

풀이

포인터를 두개 두고, 

left : 맨 처음 인덱스부터 

right : 중간 인덱스 부터 

서로 일치하는 구간을 찾아나감 

*주의 : string의 길이가 홀수/짝수에 따라 중간인덱스(right)가 달라짐.

 

 

코드

public String sameEnds(String string) {

        String ans="";
        int size = string.length();
        int left = 0, right = size/2;
        if(size%2==1){
            right++;
        }

        //투포인터 탐색
        while(left<size/2 && right<size){

            if(string.charAt(left)!=string.charAt(right)){
                right++;
            }
            else {
                ans+=string.charAt(left);
                left++;
                right++;
            }

        }

        return ans;
    }

 

 

다른 사람의 풀이

    public String sameEnds(String string){
        
        int len = string.length();
        String fin = "";
        String tmp = "";
        
        for(int i=0; i<len; i++){
            tmp += string.charAt(i);//처음부터 한자씩 저장 
            int tmplen = tmp.length();//길이를 저장 
            if( i<len/2 && tmp.equals(string.substring(len-tmplen,len))) 
            	fin = tmp;//끝부터 길이 만큼의 substring과 같은지 검사
        }
        return fin;
        
    }

 

 

728x90