碎碎念:今天的比较简单
参考:代码随想录
344.反转字符串
题目链接
思想
基础题
题解
class Solution {
public:
void reverseString(vector<char>& s) {
for (int i = 0, j = s.size() - 1; i < j; i++, j--){
swap(s[i], s[j]);
}
}
};
class Solution:
def reverseString(self, s: List[str]) -> None:
"""
Do not return anything, modify s in-place instead.
"""
i = 0
j = len(s) - 1
while i < j:
s[i], s[j] = s[j], s[i]
i += 1
j -= 1
541. 反转字符串II
题目链接
思想
要实现每次操作2k中的k个字符,可以让i每次加2k,不用特意设置一个count来控制。
题解
class Solution {
public:
void reverseString(string& s, int start, int end) {
for (int i = start, j = end; i < j; i++, j--){
swap(s[i], s[j]);
}
}
string reverseStr(string s, int k) {
for (int i = 0; i < s.size(); i += (2 * k)) {
if (i + k <= s.size()) {
reverseString(s, i, i + k - 1);
continue;
}
reverseString(s, i, s.size() - 1);
}
return s;
}
};
class Solution:
def reverseStr(self, s: str, k: int) -> str:
i = 0
while i < len(s):
j = i + k
s = s[:i] + s[i:j][::-1] + s[j:]
i += 2 * k
return s
反思
continue关键字用于跳过循环体中剩余的代码,直接进入下一次循环的条件判断。
当执行到continue语句时,循环体中该语句后面的代码不再执行,直接跳转到下一次循环的开始处。
python处理字符串用切片比较方便。
卡码网:54.替换数字
题目链接
思想
首先遍历字符串统计数字的个数,然后扩充字符串的大小,用双指针法从后向前填充。
题解
# include <iostream>
using namespace std;
int main() {
string s;
cin >> s;
int count = 0;
for (int i = 0; i < s.size(); i++) {
if (s[i] >= '0' && s[i] <= '9') count++;
}
int sOldIndex = s.size() - 1;
s.resize(s.size() + count * 5);
int sNewIndex = s.size() - 1;
while (sOldIndex >= 0) {
if (s[sOldIndex] >= '0' && s[sOldIndex] <= '9') {
s[sNewIndex--] = 'r';
s[sNewIndex--] = 'e';
s[sNewIndex--] = 'b';
s[sNewIndex--] = 'm';
s[sNewIndex--] = 'u';
s[sNewIndex--] = 'n';
} else s[sNewIndex--] = s[sOldIndex];
sOldIndex--;
}
cout << s << endl;
}
s = input()
list_s = list(s)
for i in range(len(s)):
if list_s[i].isdigit():
list_s[i] = "number"
print(''.join(list_s))