当前位置: 首页 > news >正文

算法随想录第八天打卡|344.反转字符串,541. 反转字符串II, 卡码网:54.替换数字, 151.翻转字符串里的单词,卡码网:55.右旋转字符串

344.反转字符串

建议: 本题是字符串基础题目,就是考察 reverse 函数的实现,同时也明确一下 平时刷题什么时候用 库函数,什么时候 不用库函数

题目链接/文章讲解/视频讲解:代码随想录

Python

class Solution:def reverseString(self, s: List[str]) -> None:left,right=0,len(s)-1while left<right:s[left],s[right]=s[right],s[left]left+=1right-=1return s

C++

class Solution {
public:void reverseString(vector<char>& s) {int left=0,right=s.size()-1;while (left<right){swap(s[left], s[right]);left++;right--;}}
};

541. 反转字符串II

建议:本题又进阶了,自己先去独立做一做,然后在看题解,对代码技巧会有很深的体会。

题目链接/文章讲解/视频讲解:代码随想录

Python

class Solution:def reverse(self,nums,left,right):if right>len(nums)-1:right=len(nums)-1while left<right:nums[left],nums[right]=nums[right],nums[left]left+=1right-=1def reverseStr(self, s: str, k: int) -> str:nums=list(s)trust=1for i in range(0,len(nums),k):if trust:self.reverse(nums,i,i+k-1)trust=0else:trust=1return ''.join(nums)

C++

class Solution {
public:vector<char>nums;vector<char> reverselist(vector<char>nums,int left,int right){if (right>nums.size()-1){right=nums.size()-1;}while (left<right){swap(nums[left],nums[right]);left+=1;right-=1;}return nums;}string reverseStr(string s, int k) {bool trust=1;for (int i=0;i<s.size();i++)nums.push_back(s[i]);for (int i=0;i<nums.size();i+=k){if (trust){nums=reverselist(nums,i,i+k-1);trust=0;}else{trust=1;}} string result;   for (int i=0;i<nums.size();i++){result+=nums[i];} return result;}
};

总结

这C++的数据结构变换真是麻烦呀。

卡码网:54.替换数字

建议:对于线性数据结构,填充或者删除,后序处理会高效的多。好好体会一下。

题目链接/文章讲解:代码随想录

Python

s=input()
nums=list(s)
for i in range(len(nums)):if abs(ord(nums[i])-ord("0"))<=10:nums[i]="number"
print("".join(nums))

C++

#include <iostream>
using namespace std;
int main() {string s;cin>>s;int left = s.size() - 1;int isdigit = 0;for (int i = 0; i < s.size(); i++) {if (s[i] >= '0' && s[i] <= '9') {isdigit++;}}s.resize(isdigit * 5 + s.size());int right = s.size() - 1;while (left >= 0) {if (s[left] >= '0' && s[left] <= '9') {s[right--] = 'r';s[right--] = 'e';s[right--] = 'b';s[right--] = 'm';s[right--] = 'u';s[right--] = 'n';}else {s[right--] = s[left];}left--;}cout << s << endl;
}

总结

C++可以修改字符串

151.翻转字符串里的单词

建议:这道题目基本把 刚刚做过的字符串操作 都覆盖了,不过就算知道解题思路,本题代码并不容易写,要多练一练。

题目链接/文章讲解/视频讲解:代码随想录

C++

class Solution {
public:void reverse(string& s,int left,int right){while (left<right){swap(s[left],s[right]);left++;right--;}}void removeExtraSpaces(string& s){int slow=0;for (int i=0;i<s.size();i++){if (s[i]!=' '){if (slow!=0)s[slow++]=' ';while (i<s.size() && s[i]!=' '){s[slow++]=s[i++];}}}s.resize(slow);}string reverseWords(string s) {removeExtraSpaces(s);reverse(s,0,s.size()-1);int start=0;for (int i=0;i<=s.size();i++){if (i==s.size() || s[i]==' '){reverse(s,start,i-1);start=i+1;}}return s;}
};

总结

一刷的时候直接split了,没想到实现起来这么难。

卡码网:55.右旋转字符串

建议:题解中的解法如果没接触过的话,应该会想不到

题目链接/文章讲解:

代码随想录

C++

#include <iostream>
using namespace std;
int main() {string s;int n;cin >> n >> s;string res = "";for (int i = s.size() - n; i < s.size(); i++) {res += s[i];}for (int i = 0; i < s.size() - n; i++) {res += s[i];}cout << res << endl;
}

总结

算了,就空间复杂度为n吧。

总结

之后还是都用C++吧,节约点时间

http://www.lryc.cn/news/350143.html

相关文章:

  • 外卖系统的JWT实现登录
  • 基于springboot实现的家具销售电商平台
  • STM32中的Systick的使用
  • 做一个桌面悬浮翻页时钟
  • Transformers中加载预训练模型的过程剖析(一)
  • 数据可视化的艺术:使用Matplotlib和Seaborn揭示数据故事
  • 2024全新小狐狸AI免授权源码
  • Python基础详解四
  • es6新语法和ajax和json
  • Hadoop3:HDFS副本节点选择逻辑讲解
  • Java 高级面试问题及答案 更新(二)
  • MacOS安装Go
  • 【微服务最全详解】
  • 如何在云电脑实现虚拟应用—数据分层(应用分层)技术简介
  • 【动态规划五】回文串问题
  • 【C++杂货铺铺】AVL树
  • 【R语言】生存分析模型
  • 「AIGC」Python实现tokens算法
  • 【Unity】编程感悟20240510
  • C#【进阶】泛型
  • 50. UE5 RPG FGameplayEffectContext
  • Golang 的 unmarshal 踩坑指南
  • Linux的常用指令 和 基础知识穿插巩固(巩固知识必看)
  • MP3解码入门(基于libhelix)
  • Oracle 中索引与完整性(SQL)
  • 【Linux深度学习笔记5.13(Apache)】
  • 汇编语言入门:探索 x86 架构
  • [ffmpeg处理指令]
  • 测试之路 - 精准而优雅
  • Java基础篇常见面试问题总结