PS

코딩 인터뷰 완전 분석 1.5 하나 빼기

Bryan Lee 2022. 4. 11. 23:26

문제 이해

- 두 문자열의 편집 횟수가 1회 이내인지 확인하라

 

해결 전략

- 두 문자열의 길이가 같다면, 문자열을 순회하면서 다른 문자가 하나 이하인지 확인한다

- 두 문자열의 길이가 다르다면, 길이가 짧은 문자열을 기준으로 순회하면서  

  두 문자열이 다르다면, 해당 문자를 긴 문자열에서 제거해준다. 

  그 이후 두 문자열이 같은지 확인한다. 

 

구현

import java.util.*;
public class Main {	
	public boolean solution(String s1, String s2){
	
	    int len1 = s1.length();
	    int len2 = s2.length();
	    
	    if(len1 == len2){
	        
	        int diffCnt = 0; 
	        
	        for(int i=0; i<s1.length(); i++){
	            if(s1.charAt(i) != s2.charAt(i)){
	                diffCnt += 1;
	            }
	        }
	       
	        if(diffCnt >= 2){
	            return false;
	        }else{
	            return true;
	        }
	        
	    }else{
	        
	        int diffPos = 0; 
	        int minLen = Math.min(len1, len2);
	        
	            
	        for(int i=0; i<minLen; i++){
	           if(s1.charAt(i) != s2.charAt(i)){
	                    diffPos = i;
	                    break;
	                }
	        }
	        
	        if(minLen == len1){
	            s2 = s2.substring(0, diffPos) + s2.substring(diffPos+1);
	        }else if(minLen == len2){
	            s1 = s1.substring(0, diffPos) + s1.substring(diffPos+1);
	        }
	        
	        if(s1.equals(s2)){
	                return true;
	        }else{
	                return false;
	        }
	    }
	   
	}

	public static void main(String[] args){
		Main T = new Main();
		Scanner kb = new Scanner(System.in);
		String str1=kb.next();
		String str2=kb.next();
		System.out.println(T.solution(str1, str2));
	}
}

 

피드백

- 케이스를 잘 구분해야 한다.

- 문자열에서 문자를 제거하는 방법에 대해 잘 알아야 한다. 

 

레퍼런스

Java의 문자열에서 문자 제거 | Delft Stack