sleepyotter. 2021. 9. 6. 00:29

어떤 문장이 string s로 주어지는데, 그 문장에는 단어도 섞여있고 공백도 섞여있다. 그 중에서 마지막 단어의 길이를 묻는 문제다.

예시로, "Hi, My name is Schecter   " 라고 한다면 마지막의 공백들은 무시하고 Schecter의 길이인 8을 반환하면 된다.

4ms, 6.5MB 사용

class Solution {
public:
    int lengthOfLastWord(string s) {
        if (s.size() == 0) return 0;
        int idx = s.size() - 1;
        int cnt = 0;
        for (; idx >= 0; --idx)
        {
            if ((s[idx] >= 65 && s[idx] <= 90) || (s[idx] >= 97 && s[idx] <= 122))
            {
                break;
            }
        }

        for (; idx >= 0; --idx)
        {
            if ((s[idx] >= 65 && s[idx] <= 90) || (s[idx] >= 97 && s[idx] <= 122))
            {
                cnt++;
            }
            else
            {
                break;
            }
        }

        return cnt;
    }
};

근데, 다른 사람들의 코드를 보다가 아스키코드표에 공백값으로 32가 지정돼 있단걸 떠올렸다. (솔직히,,, 1,2학년 때나 OpenCV할 때 빼고는 아스키값 쓴 적이 거의 없던거 같은데)

뒤에서 부터 접근한다는 방식은 비슷하고, 공백이 아닌 문자가 등장하는 위치부터 시작한다는 점도 비슷하지만 if문이 좀 더 간단하다는 점이 다르다.

class Solution {
public:
    int lengthOfLastWord(string s) {
        int len=s.length();
        int count=0;
        for(int i=len-1;i>=0;i--)
        {
            if(s[i]==32)
                count++;
            else
                break;
        }
        int words=0;
        for(int i=len-count-1;i>=0;i--)
        {
            if(s[i]!=32)
                words++;
            else
                break;
        }
        return words;
    }
};