728x90

역순으로 돌려도 같은 문자열이 나오는 경우의 수 중에서 가장 길이가 긴 문자열을 반환 하는 문제

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
//똑같은 알파벳으로 시작하고 끝나는 경우, 그 단어가 가장 긴 문자열을 반환하는 것.
//이 때 공백도 하나의 문자로 취급해서 길이에 카운트 해줘야 한다.
//내가 헷갈렷던 건 단어들을 쪼갤 수 있는건지? 아니면 그냥 같은 알파벳으로 끝나고 시작만 하면 되는건지가 헷갈렸다.
//새로 작성한 코드는 후자의 경우로 다시 풀어 본것
//그리고 가장 중요한데 고려를 하지 못한 것이 같은 문자로 시작하고 끝나는 것과 더불어서
//그 단어를 뒤집어도 기존 단어와 똑같아야 한다는 것
var longestPalindrome = function (string) {
  //문자열을 소문자로 다 바꿔주기
  string = string.toLowerCase();
  let res = '';
  for (let i = 0; i < string.length; i++) {
    for (let j = i + 1; j < string.length; j++) {
      if (string[i] === string[j]) {
        let temp = string.slice(i, j + 1);
        if (temp === temp.split('').reverse().join('')) {
          if (temp.length > res.length) {
            res = temp;
          }
        }
      }
    }
  }
  return res;
};
 
//아래가 첫번째 코드
//너무 꼬아서 생각했나 싶어서 다시 코드 작성 시도
// var longestPalindrome = function (string) {
//   //debugger;
//   //문자열을 소문자로 다 바꿔주기
//   string = string.toLowerCase();
//   //문자열 내의 공백을 하나의 문자처럼 취급해주기 위해서 공백들을 모두 "."으로 변환해주기
//   //let newStr = string.replace(/ /g, '.'); // newStr = my.dad.is.a.racecar.athlete
//   //그리고 문자열을 공백 기준으로 나눠주기
//   let newStrArr = newStr.split(' '); // newStrArr = [my,dad,is,a,racecar,athlete]
//   let largestLen = 0;
//   //우선 주어진 문자열 배열을 반복문을 돌면서, 그 문자열 내의 같은 문자를 찾고, 같다면 길이를 재기
//   for (let i = 0; i < newStrArr.length; i++) {
//     // i = 4 , tempWord = newStrArr[4] = racecar
//     let tempWord = newStrArr[i];
//     for (let j = 0; j < tempWord.lenth - 1; j++) {
//       //j=0 ,  tempWord[0] = r / temp = acecar /
//       //단어 내에서 같은 문자열이 존재하는 경우에만 연산
//       let temp = tempWord.splice(j, 1);
//       if (temp.indexOf(tempWord[j]) !== -1) {
//         let firstIdx = j;
//         let afterIdx = temp.indexOf(tempWord[j]) + 1;
//         let tempLen = afterIdx - firstIdx + 1
//         //만약에 해당 길이가 단어 자체의 길이라면 앞뒤 공백값까지 길이에 포함할 수 있다.
//         if(firstIdx === 0 && afterIdx === tempWord.lenth - 1){
//           tempLen +=2
//         }
//         if (afterIdx - firstIdx + 1 > largestLen) {
//           largestLen = afterIdx - firstIdx + 1;
//         }
//         break;
//       }
//     }
//   }
// };
 
// longestPalindrome('My dad is a racecar athlete');
 
cs
728x90

+ Recent posts