前言
这里记录一下陈菜菜的刷题记录,主要应对25秋招、春招
个人背景
211CS本+CUHK计算机相关硕,一年车企软件开发经验
代码能力:有待提高
常用语言:C++
系列文章目录
第一天 数组 part01
第二天 数组 part02
第三天 链表 part01
第四天 链表 part02
第五天 休息
第六天 哈希表 part01
第七天 哈希表 part02
第八天 字符串 part01
`
文章目录
一、今日任务
● 344.反转字符串
● 541. 反转字符串II
● 卡码网:54.替换数字
二、详细布置
344.反转字符串
题目链接:力扣344
文章讲解:代码随想录-344.反转字符串
视频讲解:代码随想录
编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 s 的形式给出。
不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题
提示:
1 <= s.length, t.length <= 5 * 104
s 和 t 仅包含小写字母
样例1:
输入:s = ["h","e","l","l","o"]
输出:["o","l","l","e","h"]
样例2:
输入:s = ["H","a","n","n","a","h"]
输出:["h","a","n","n","a","H"]
思路
这题就是回文串的变形,用一个temp变量存储,交换头尾对称位置的元素即可。
实战
class Solution {
public:
void reverseString(vector<char>& s) {
int len=s.size();
char temp;
for(int i=0;i<len/2;i++){
temp=s[i];
s[i]=s[len-1-i];
s[len-1-i]=temp;
}
//return s;
}
};
541. 反转字符串II
给定一个字符串 s 和一个整数 k,从字符串开头算起,每计数至 2k 个字符,就反转这 2k 字符中的前 k 个字符。
如果剩余字符少于 k 个,则将剩余字符全部反转。
如果剩余字符小于 2k 但大于或等于 k 个,则反转前 k 个字符,其余字符保持原样。
提示:
1 <= s.length <= 104
s 仅由小写英文组成
1 <= k <= 104
样例1:
输入:s = "abcdefg", k = 2
输出:"bacdfeg"
样例2:
输入:s = "abcd", k = 2
输出:"bacd"
思路
这题难点在读题。。。
题目意思其实是k个翻转,k个不转,以此类推,剩下不足k个的全翻转。
让累加器i每次+k即可。
实战
class Solution {
public:
string reverseStr(string s, int k) {
int len=s.size();
//int f=len/k;
int i;
for(i=0;i<len;i+=2*k){
if(i+k<len)
reverse(s.begin()+i,s.begin()+i+k);
else
reverse(s.begin()+i,s.end());
}
return s;
}
};
踩坑
翻转前要看末端有没有超过字符串尾部,即i+k>len?
卡码网:54.替换数字
题目描述
给定一个字符串 s,它包含小写字母和数字字符,请编写一个函数,将字符串中的字母字符保持不变,而将每个数字字符替换为number。 例如,对于输入字符串 “a1b2c3”,函数应该将其转换为 “anumberbnumbercnumber”。
提示:
1 <= s.length < 10000。
样例1:
输入:a1b2c3
输出:anumberbnumbercnumber
解释:其中每个数字字符都被替换为了number
思路
这题简单题。
实战
#include<string>
#include<iostream>
#include<cstdio>
using namespace std;
int main(){
string s;
cin>>s;
int len=s.size();
int i;
for(i=0;i<len;i++){
if(s[i]>='a'&&s[i]<='z')
cout<<s[i];
else
cout<<"number";
}
return 0;
}
总结
今天主要学习了字符串的一系列操作,字符串是真有用,受益颇多!继续加油!
加油,坚持打卡的第八天。