字符串:双指针
睡不醒的鲤鱼 2021-10-03 每日一题 LeetCode
# 0038. 外观数列 (opens new window)
题目
给定一个正整数 n ,输出外观数列的第 n 项。
「外观数列」是一个整数序列,从数字 1 开始,序列中的每一项都是对前一项的描述。
递归,终止条件为 n = 1
,双指针提取字符串中连续重复数字,将其转换成描述拼接到结果中。
代码
class Solution {
public:
string countAndSay(int n) {
if (n == 1) return "1";
string s = countAndSay(n - 1);
int len = s.length();
string ans = "";
for (int i = 0, j = 0; i < len; i++) {
while (j < len && s[i] == s[j]) j++;
ans += to_string(j - i) + s[i];
i = j - 1;
}
return ans;
}
};
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 0058. 最后一个单词的长度 (opens new window)
题目
给你一个字符串 s,由若干单词组成,单词之间用空格隔开。返回字符串中最后一个单词的长度。如果不存在最后一个单词,请返回 0。
单词 是指仅由字母组成、不包含任何空格字符的最大子字符串。
从后向前遍历字符串,找到第一个非空字符的位置,之后继续向前遍历,直到遇到空格位置,记录两个位置的间隔,即为最后一个单词的长度。
代码
class Solution {
public:
int lengthOfLastWord(string s) {
for (int i = s.length() - 1; i >= 0; i--) {
if (s[i] == ' ') continue;
int j = i - 1;
while (j >= 0 && s[j] != ' ') j--;
return i - j;
}
return 0;
}
};
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12