709. To Lower Case
Analysis
只用将大写字母转换为小写即可。
Code
1 | class Solution { |
em,既然使用 C++ 写的,就用 C++11 的写法:1
2
3
4
5
6
7
8
9class Solution {
public:
string toLowerCase(string s) {
for(char& ch: s) {
ch = tolower(ch);
}
return s;
}
};
也可以自己实现 tolower 的功能:1
2
3
4
5
6
7
8
9class Solution {
public:
string toLowerCase(string s) {
for(char& ch: s) {
if(isupper(ch)) ch |= 32;
}
return s;
}
};
为什么可以写成ch |= 32
?因为大写字母的 ASCII 码要转换为小写就是加上 32,而这些大写字母的二进制表示有一个共同点,那就是表示 32 的那一位上全部是 0。换句话说,要让这个数字增加 32,只需要将这个数字的表示 32 的二进制数位从 0 变成 1 即可。这样写的好处就是用位运算取代了加运算,可以极大的提升效率。
1309. Decrypt String from Alphabet to Integer Mapping
Analysis
解码字符串,em,这是个简单的字符串分类讨论题。
Code
1 | class Solution { |
em,逻辑过程还可以更加精炼一点:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17class Solution {
public:
string freqAlphabets(string s) {
string ret;
int i = 0;
while(i < s.length()) {
if(i + 2 < s.length() && s[i + 2] == '#') {
ret += ((s[i] - '0') * 10 + (s[i + 1] - '0') - 1 + 'a');
i += 3;
} else {
ret += (s[i] - '0' - 1 + 'a');
i += 1;
}
}
return ret;
}
};
953. Verifying an Alien Dictionary
Analysis
按照给定的顺序对字符串排序,em,这个题好像是字符串排序的原理。
Code
1 | class Solution { |
这个题有点麻烦,但不是个难题。因为不同的样例会给出不同的字母顺序,所以最好将字母顺序散列的保存起来,后面比较的时候就可以直接用了。
Summary
em,3 个简单的字符串相关题目,都挺简单的。