210819 알고리즘 문제

박은정·2021년 8월 19일
0

TIL

목록 보기
15/72

const getLengthOfStr = str => {
  // 초기상태 설정
  let countMax = 0; // 중복되지않은 문자열의 길이 초기상태
  let countString = ""; // 중복되지않은 문자열 초기상태

  // 문자열의 처음부터 끝까지 찾아야 하므로 for문 이용한다
  for(let i=0; i<str.length; i++) {
    console.log(`i의 값이 ${i}일 때, countString의 값은 ${countString}`);
    // 구하려는 문자열에서 str[i]를 처음으로 찾았을 때의 인덱스번호
    let indexOfStr = countString.indexOf(str[i]);
      console.log(`i의 값은 ${i}이고, ${indexOfStr}`);
    // str[i]의 문자가 문자열에서 구하려는 문자열에서 중복된다면
    if (indexOfStr !== -1) {
      console.log(`자르기 전 countString은 ${countString}`)
      // 구하려는 문자열에서 str[i] 문자 다음부터 끝까지만 잘라서 다시 넣어준다
      countString = countString.substr(indexOfStr + 1); 
      console.log(`자른 뒤의 countString은 ${countString}`)
      
    }
    // 중복되었던 str[i]를 다시 구하려는 문자열에 넣어준다
    countString = countString + str[i]; 
    console.log(`if문을 지난 countString의 결과는 ${countString}`)
    // 기존에 구하려던 문자열의 길이와 새로 구한 문자열의 길이 값을 비교해서 큰 값을 countMax 변수에 넣어준다
    countMax = Math.max(countMax, countString.length);
    
  }
  // 그렇게 찾은 countMax(=중복되지않은 문자열의 길이)를 반환한다
  return countMax;
  
}

getLengthOfStr("sttrg");
 const getLengthOfStr = str => {
   let Currentlength = 0;
   let newStr = "";
  
   for(let i = 0; i < str.length; i ++) {
     let indexOfStr = newStr.indexOf(str[i]); 
     // 겹치는 것을 빼고새로운 문자열로 반환
     if(indexOfStr !== -1) { 
       newStr = newStr.substr(indexOfStr + 1); 
       console.log("i의 값은 " + i + "// newStr의 값은 " + newStr)
     }
     // newStr에 문자 추가 abc
     newStr += str[i];  
    
     // 길이 
     Currentlength = Math.max(Currentlength, newStr.length); // 3 vs 3
   }
   return Currentlength;  
 }

 getLengthOfStr("abcdabceaba");
profile
새로운 것을 도전하고 노력한다

0개의 댓글