使用前后指针解决:
class Solution {
public:
void reverseString(vector& s) {
int begin=0;
int end=s.size()-1;
while(begin
给定一个字符串 s 和一个整数 k,从字符串开头算起,每计数至 2k 个字符,就反转这 2k 字符中的前 k 个字符。
如果剩余字符少于 k 个,则将剩余字符全部反转。
如果剩余字符小于 2k 但大于或等于 k 个,则反转前 k 个字符,其余字符保持原样。
依然使用前后指针法。
class Solution {
public:
void Swap(int& begin,int& end,string& s)
{
while(begin=k&&len<2*k)
{
int begin=i;
int end=i+k-1;
Swap(begin,end,s);
}
else
{
int begin=i;
int end=i+k-1;
Swap(begin,end,s);
}
}
return s;
}
};
请实现一个函数,把字符串 s
中的每个空格替换成"%20"。
1.首先遍历整个字符串,计算出空格的个数,根据空格个数来扩容字符串。
2.使用前后指针法,从后向前遍历。
3.将后指针指向的值赋值为前指针指向的值,如果前指针是空格,则后指针移动并填入%20
class Solution {
public:
string replaceSpace(string s) {
int count=0;//空格的个数
int len=s.size();
for(int i=0;i=0)
{
if(s[begin]!=' ')
{
s[end]=s[begin];
begin--;
end--;
}
else
{
s[end]='0';
s[--end]='2';
s[--end]='%';
end--;
begin--;
}
}
return s;
}
};
给你一个字符串 s ,请你反转字符串中 单词 的顺序。
单词 是由非空格字符组成的字符串。s 中使用至少一个空格将字符串中的 单词 分隔开。
返回 单词 顺序颠倒且 单词 之间用单个空格连接的结果字符串。
注意:输入字符串 s中可能会存在前导空格、尾随空格或者单词间的多个空格。返回的结果字符串中,单词间应当仅用单个空格分隔,且不包含任何额外的空格
单词是有空格的,空格也需要被去重。
1.对空格进行去重。使用前后指针法。
2.反转整个字符串。
3.反转每个单词。
class Solution {
public:
void Reverse(string& s,int begin,int end)
{
while(begin
输入: s = "abcdefg", k = 2
输出: "cdefgab"
1.首先反转前n个字符。
2.然后反转后面的字符。
3.最后将这个字符串反转。
class Solution {
public:
string reverseLeftWords(string s, int n) {
reverse(s.begin(),s.begin()+n);
reverse(s.begin()+n,s.end());
reverse(s.begin(),s.end());
return s;
}
};
class Solution {
public:
int strStr(string haystack, string needle) {
vector next;
next.resize(needle.size());
int j=-1;
next[0]=-1;
for(int i=1;i=0&&needle[i]!=needle[j+1])
{
j=next[j];
}
if(needle[i]==needle[j+1])
{
j++;
}
next[i]=j;
}
j=-1;
for(int i=0;i=0&&needle[j+1]!=haystack[i])
{
j=next[j];
}
if(haystack[i]==needle[j+1])
{
j++;
}
if(j==needle.size()-1)
{
return i-j;
}
}
return -1;
}
};
给定一个非空的字符串 s
,检查是否可以通过由它的一个子串重复多次构成。
1.首先使用两个该字符串拼接成一个大字符串。
2.然后对大字符串进行掐头去尾。
3.如果在大字符串中还能找到该字符串的话,则有重复子字符串。
class Solution {
public:
bool repeatedSubstringPattern(string s) {
string t=s+s;
t.erase(t.begin());
t.erase(t.end()-1);
if(t.find(s)!=std::string::npos)
{
return true;
}
return false;
}
};