代码随想录--字符串
344. 反转字符串
https://leetcode.cn/problems/reverse-string/

class Solution {
public:
void reverseString(vector<char>& s) {
int size = s.size();
for(int j = size-1, i = 0; i < size/2; j--, i++)
{
swap(s[i],s[j]);
}
}
};
541. 反转字符串Ⅱ
https://leetcode.cn/problems/reverse-string-ii/

class Solution {
public:
string reverseStr(string s, int k) {
for(int i = 0; i < s.size(); i += 2*k)
{
if(i + k <= s.size())
reverse(s.begin()+i, s.begin()+i+k);
else
reverse(s.begin()+i, s.end());
}
return s;
}
};
151. 反转字符串中的单词
https://leetcode.cn/problems/reverse-words-in-a-string/submissions/489714833/

class Solution {
public:
string reverseWords(string s) {
int slow = 0;
for(int fast = 0; fast < s.size(); fast++)
{
if(s[fast]!=' ')
{
if(slow!=0) s[slow++] = ' '; // 单词间加空格
while(fast<s.size()&&s[fast]!=' ')
s[slow++] = s[fast++];
}
}
s.resize(slow);
//现在已经去掉多余空格了
//先整体反转,再每个单词反转回来
reverse(s.begin(),s.end());
auto start = s.begin();
for(int i = 0; i <= s.size(); i++)
{
if(i==s.size() || s[i] == ' ')
{
reverse(start, s.begin()+i);
start = s.begin() + i + 1;
}
}
return s;
}
};
找出字符串第一个匹配项的下标
class Solution {
public:
int strStr(string haystack, string needle) {
int len = needle.size();
if(len==0) return 0;
//找next数组
int next[len];
int j = 0;
next[0] = 0;
for(int i = 1; i < len; i++)
{
//这个要放在前面,比如acad acac,卡d卡不上,j往前跳一下ac就能卡上了
//这里不可以j=0,因为第一次测试的串只有俩字母比如ac,就直接next[1]=0就好
while(needle[i]!=needle[j] && j>0)
j = next[j-1];
//needle串是abcd abce
if(needle[i]==needle[j])
++j;
next[i] = j;
}
j = 0;
//这里i=0表示卡到文本串的开头
for(int i = 0; i < haystack.size(); i++)
{
while(haystack[i]!=needle[j] && j>0)
j = next[j-1];
if(haystack[i]==needle[j])
++j;
if (j == needle.size())
return (i - needle.size() + 1);
}
return -1;
}
};
重复的子字符串
https://leetcode.cn/problems/repeated-substring-pattern/

class Solution {
public:
bool repeatedSubstringPattern(string s) {
string t = s + s;
t.erase(t.begin());
t.erase(t.end()-1);
if(t.find(s)!=string::npos)
return true;
return false;
}
};


浙公网安备 33010602011771号