有哪些做外貿(mào)免費(fèi)的網(wǎng)站深圳網(wǎng)站設(shè)計(jì)專家樂云seo
344.反轉(zhuǎn)字符串
建議: 本題是字符串基礎(chǔ)題目,就是考察 reverse 函數(shù)的實(shí)現(xiàn),同時(shí)也明確一下 平時(shí)刷題什么時(shí)候用 庫函數(shù),什么時(shí)候 不用庫函數(shù)
題目鏈接/文章講解/視頻講解:代碼隨想錄
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. 反轉(zhuǎn)字符串II
建議:本題又進(jìn)階了,自己先去獨(dú)立做一做,然后在看題解,對(duì)代碼技巧會(huì)有很深的體會(huì)。
題目鏈接/文章講解/視頻講解:代碼隨想錄
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;}
};
總結(jié)
這C++的數(shù)據(jù)結(jié)構(gòu)變換真是麻煩呀。
卡碼網(wǎng):54.替換數(shù)字
建議:對(duì)于線性數(shù)據(jù)結(jié)構(gòu),填充或者刪除,后序處理會(huì)高效的多。好好體會(huì)一下。
題目鏈接/文章講解:代碼隨想錄
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;
}
總結(jié)
C++可以修改字符串
151.翻轉(zhuǎn)字符串里的單詞
建議:這道題目基本把 剛剛做過的字符串操作 都覆蓋了,不過就算知道解題思路,本題代碼并不容易寫,要多練一練。
題目鏈接/文章講解/視頻講解:代碼隨想錄
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;}
};
總結(jié)
一刷的時(shí)候直接split了,沒想到實(shí)現(xiàn)起來這么難。
卡碼網(wǎng):55.右旋轉(zhuǎn)字符串
建議:題解中的解法如果沒接觸過的話,應(yīng)該會(huì)想不到
題目鏈接/文章講解:
代碼隨想錄
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;
}
總結(jié)
算了,就空間復(fù)雜度為n吧。
總結(jié)
之后還是都用C++吧,節(jié)約點(diǎn)時(shí)間。