문제 : 문자열 두개를 입력받아 순열여부 확인
<Check substring is permutation of main string>

  1. 1차 솔루션

    1. code

    2. ```java

      /**
       * Autor   : Joosang Kim
       * Version : 1.0.0 
       * Method  : check substring is permutation
       * Params  : String 
       * Return  : Boolean
       */
      public boolean stringPermutation(String str, String test){
          boolean ret = false;
          permutation(str, str.length(), 0);
          //System.out.println(this.arrList.size());
      
          if(arrList.contains(test)){
              ret = true;
          }
      
          return ret;
      }
      
      /**
       * Autor : Joosang Kim
       * Version : 1.0.0
       * Method : permutate string
       * Params : String
       * Return : String
       */
      public String permutation(String str, int total, int current){
          String temp = "";

          if(current+1 == total){
              System.out.println(str);
              arrList.add(str);
              return str;
          }
          //current -> 0  total -> length 
          for(int i = current; i<total;i++){
              temp = swap(str, i, current);
              permutation(temp, total,current+1);
              str = swap(temp, i, current);

          }
          return str;  
      }

      public String swap(String str, int from, int to){
          char[] charStr = str.toCharArray();
          char temp = 0;

          temp = charStr[from];
          charStr[from] = charStr[to];
          charStr[to] = temp;

          return new String(charStr);
      }
  ```
  1. feedback

    1. 문자열 구성이 ASCII 인가 UTF-8인가?
    2. (영어)대소문자를 구별하는가
    3. 공백도 문자취급을 하는가?
  1. 풀이방법

    1. 두 문자열의 글자의 출현 횟수 세기

      1. 두 문자열에 출현하는 글자의 갯수와 종류가 동일하다면,

      2. 0 ~ 127 번까지 맵핑되어 있으며, 영어사용만 권장

    2. UTF-8

      1. 0 ~ 127 사이의 문자는 1byte로 저장. 128이상인 것들은 2byte , 3byte로 늘려나감
  2. 2차 솔루션

    1. ASCII 코드를 사용한다고 가정

    2. Boolean 개념 도입

    3. code

    4. /**
           * Autor   : Joosang Kim
           * Version : 1.0.0 
           * Method  :Check String elements 
           * Params  : String 
           * Return  : Boolean
           */
          public boolean checkStringElements(String str){
              boolean ret = false;
              if(str.length() > 256){ // str contains multiple character
                  return ret;
              }
              boolean[] char_set = new boolean[256];
      
              for(int i = 0; i< str.length(); i++){
                  int val = str.charAt(i);
                  if(char_set[val]){
                      return ret;
                  }
                  char_set[val]=true;
              }
              ret = true;
              return ret;
          }
      
    5. feedback
      1. ASCII 코드로 가정했으므로, 중복없는 문자는 최대 256 개 존재 가능( 그 이상 존재시 중복항 존재 문자열)
      2. 256사이즈의 boolean 배열에 문자열 원소값에 ASCII값을 대응.
      3. ASCII index에 true / false 구분

results matching ""

    No results matching ""