프로그래밍/알고리즘+코딩테스트
Length of Last Word
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;
}
};