2129. 将标题首字母大写#
与えられた文字列 title
は、単一のスペースで区切られた 1 つ以上の単語で構成されています。各単語は英字のみを含みます。以下のルールに従って、各単語の最初の文字を 大文字 に変換してください。
- 単語の長さが
1
または2
の場合、すべての文字を小文字に変換します。 - それ以外の場合、単語の最初の文字を大文字に変換し、残りの文字を小文字に変換します。
変換後の title
を返してください。
例 1:
入力:title = "capiTalIze tHe titLe"
出力:"Capitalize The Title"
説明:
すべての単語の長さが少なくとも3であるため、各単語の最初の文字を大文字に変換し、残りの文字を小文字に変換します。
例 2:
入力:title = "First leTTeR of EACH Word"
出力:"First Letter of Each Word"
説明:
単語 "of" の長さは2なので、すべて小文字のままです。
他の単語の長さは少なくとも3であるため、各単語の最初の文字を大文字に変換し、残りの文字を小文字に変換します。
例 3:
入力:title = "i lOve leetcode"
出力:"i Love Leetcode"
説明:
単語 "i" の長さは1なので、そのまま小文字です。
他の単語の長さは少なくとも3であるため、各単語の最初の文字を大文字に変換し、残りの文字を小文字に変換します。
ヒント:
title
は単一のスペースで区切られた単語で構成されており、前後に空白はありません。- 各単語は大文字と小文字の英字のみで構成され、空ではありません。
模擬#
class Solution {
public:
string capitalizeTitle(string title) {
for (int i = 0; i < title.size(); ++i) {
int cnt = 0;
for (int j = i; title[j] != ' '; ++j) {
++cnt;
if (j + 1 >= title.size()) {
conversion(title, cnt, i, i + cnt);
break;
}
}
conversion(title, cnt, i, i + cnt);
i += cnt;
}
return title;
}
// str 句子,cnt 单词长度,i 单词起始下标,j 单词结束下标
void conversion(string &str, int cnt, int i, int j) {
if (cnt <= 2) {
for (int k = i; k < j; ++k) {
str[k] |= 32;
// str[k] = tolower(str[k]);
}
} else {
str[i] &= 95;
// str[i] = toupper(str[i]);
for (int k = i + 1; k < j; ++k) {
str[k] |= 32;
// str[k] = tolower(str[k]);
}
}
}
};
簡略化
class Solution {
public:
string capitalizeTitle(string title) {
for (int i = 0; i < title.size(); ++i) {
int j = i;
for (; title[j] != ' ' && j < title.size(); ++j) {
}
if (j - i > 2) {
title[i++] &= 95;
}
while (i < j) {
title[i++] |= 32;
}
}
return title;
}
};