오늘의 도전 #20 - 소문자로.
my coding diary의 또 다른 판(20일)에 오신 것을 환영합니다. 여기에서 내가 하는 일에 대해 생각하고 있을지도 모릅니다. 그래서 저는 매일 도전을 해결하고 흥미로운 접근 방식과 저의 학습을 공유합니다.
자, 오늘의 문제 설명으로 바로 넘어갑시다!
오늘의 문제 - To Lower Case
태그 - 쉬움
문자열
s
이 주어지면 모든 대문자를 동일한 소문자로 바꾼 후 문자열을 반환합니다.예 1:
입력: s = "안녕하세요"
출력: "안녕하세요"
문제를 반복할 필요조차 없습니다. 누구나 얻을 수 있는 간단한 도전입니다. 잠깐만요. 몇 초 안에 해결될 수 있다는 것을 압니다. 하지만 저를 믿으세요. 우리는 정말 멋진 통찰력에 대해 논의할 것입니다.
이 문제에 대한 몇 가지 솔루션이 있습니다.
가장 먼저, 가장 간단한 솔루션
class Solution {
public:
string toLowerCase(string s) {
for(int i=0;i<s.length();i++) {
s[i] = tolower(s[i]);
}
return s;
}
};
죄송합니다. 내장 기능을 사용한다고 해서 저를 벌하지 마세요.
ASCII가 구하러 온다
class Solution {
public:
string toLowerCase(string s) {
for(int i=0;i<s.length();i++) {
if(int(s[i]) >= 65 && int(s[i]) <= 90) s[i] += 32;
}
return s;
}
};
꽤 직설적 인!
Tip for C++ beginners: Use int() to convert char to decimal and use char() to convert, a number to ASCII Char.
나는 보통
A
, Z
, a
, z
의 정확한 ASCII 코드를 기억하기 위해 고군분투합니다. 그래서, 나는 이것을했다 -class Solution {
public:
string toLowerCase(string s) {
for(int i=0;i<s.length();i++) {
if(s[i] >= 'A' && s[i] <= 'Z') s[i] += 32;
}
return s;
}
};
아, 가끔 그 차이가
32
인지 기억조차 나지 않을 때가 있습니다. 그래서,if(s[i] >= 'A' && s[i] <= 'Z') s[i] = s[i] - 'A' + 'a';
여기에 더 최적화하기 위한 재미있는 접근 방식이 있습니다.
비교를 최적화하기 위해 다음을 사용하는 대신 -
if(s[i] >= 'A' && s[i] <= 'Z')
우리는 할 수 있습니다,
if(s[i] <= 'Z' && s[i] >= 'A')
따라서 모든 소문자에 대해
if
조건의 첫 번째 검사 자체에서 거부됩니다. 하나의 비교가 저장되었습니다! (드럼롤 주세요)내가 여기에서 너무 까다롭다는 것을 알고 있지만 그것이 내가 더 최적화한 방법입니다. 말할 것도 없이, 내 런타임은 제출물의 100%를 능가합니다.
One guy solved it using bit manipulation. Insane!
my coding diary의 이전 버전을 좋아할 수 있습니다.
Reference
이 문제에 관하여(오늘의 도전 #20 - 소문자로.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/pankajtanwarbanna/challenge-of-the-day-20-to-lower-case-3foh텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)