1 介绍
本博客用来记录代码随想录leetcode200题中字符串部分的题目。
2 训练
题目1:344. 反转字符串
C++代码如下,
class Solution {
public:
void reverseString(vector<char>& s) {
int i = 0, j = s.size() - 1;
while (i <= j) swap(s[i++], s[j--]);
return;
}
};
python3代码如下,
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
return
题目2:541. 反转字符串 II
C++代码如下,
class Solution {
public:
string reverseStr(string s, int k) {
int n = s.size();
for (int i = 0; i < n; i += 2 * k) {
//[i,i+2*k)
//将[i,i+k)翻转
int l = i;
int r = min(i + k - 1, n - 1);
while (l <= r) {
swap(s[l], s[r]);
l++;
r--;
}
}
return s;
}
};
python3代码如下,
class Solution:
def reverseStr(self, s: str, k: int) -> str:
i = 0
n = len(s)
s = list(s)
while i < n:
l = i
r = int(i + k - 1)
r = min(r, n - 1)
while l <= r:
s[l], s[r] = s[r], s[l]
l += 1
r -= 1
i += int(2 * k)
s = "".join(s)
return s
C++代码如下,
#include <iostream>
#include <string>
using namespace std;
int main() {
string s;
cin >> s;
string res;
for (auto c : s) {
if (c >= 'a' && c <= 'z') res += c;
else res += "number";
}
cout << res << endl;
return 0;
}
python3代码如下,
s = str(input())
res = ""
for c in s:
if c.isdigit():
res += "number"
else:
res += c
print(res)
题目4:151. 反转字符串中的单词
C++代码如下,
class Solution {
public:
string reverseWords(string s) {
vector<string> words;
int n = s.size();
for (int i = 0; i < n; ++i) {
if (s[i] != ' ') {
string t = "";
while (i < n && s[i] != ' ') {
t += s[i];
i += 1;
}
words.emplace_back(t);
}
}
reverse(words.begin(), words.end());
string res = "";
for (auto word : words) {
res += word + " ";
}
res = res.substr(0, res.size()-1);
return res;
}
};
python3代码如下,
class Solution:
def reverseWords(self, s: str) -> str:
ls = s.split()
ls = ls[::-1]
res = ""
for x in ls:
res += x + " "
res = res[0:-1]
return res
C++代码如下,
#include <iostream>
#include <string>
using namespace std;
int main() {
int k;
string s;
cin >> k >> s;
int n = s.size();
string res = s.substr(n-k) + s.substr(0,n-k);
cout << res << endl;
return 0;
}
python3代码如下,
k = int(input())
s = str(input())
n = len(s)
res = s[n-k:] + s[0:n-k]
print(res)
C++代码如下,
class Solution {
public:
int strStr(string haystack, string needle) {
return haystack.find(needle);
}
};
python3代码如下,
class Solution:
def strStr(self, haystack: str, needle: str) -> int:
return haystack.find(needle)
题目7:459. 重复的子字符串
C++代码如下,
class Solution {
public:
bool check(string& t, string& s) {
int k = s.size() / t.size();
string ts = "";
for (int i = 0; i < k; ++i) ts += t;
return ts == s;
}
bool repeatedSubstringPattern(string s) {
int n = s.size();
for (int i = 0; i < n / 2; ++i) {
string t = s.substr(0, i + 1);
if ((n % (i+1) == 0) && check(t, s)) return true;
}
return false;
}
};
python3代码如下,
class Solution:
def repeatedSubstringPattern(self, s: str) -> bool:
n = len(s)
for i in range(n // 2):
if n % (i + 1) == 0:
t = s[0:i+1]
k = n // (i + 1)
ts = t * k
if ts == s:
return True
return False