目录
344反转字符串
我如果要反转,就是最前面和最后面的字符进行交换,
//双指针的应用
class Solution {
public:
void reverseString(vector<char>& s) {
int left=0,right=s.size()-1;
while(left<right)
{
char temp=s[left];
s[left]=s[right];
s[right]=temp;
left++;
right--;
}
}
};
替换数字
#include<bits/stdc++.h>
using namespace std;
//第一思路,遇到数字就塞一个number进去?
string solutionA(string s)
{
string ans;
int n=s.length();
for(int i=0;i<n;i++)
{
if(isdigit(s[i]))
{
ans+="number";
}
else
{
ans+=s[i];
}
}
return ans;
}
//如果原地呢?就在有数字的位置插入一个number
void solutionB(string& s)
{
int i=0;
while(i<s.length())
{
if(isdigit(s[i]))
{
s.replace(i,1,"number");
i+=5;
}
i++;
}
}
int main()
{
string s;
cin>> s;
solutionB(s);
cout<< s;
return 0;
}
反转单词
- 第一思路,从后向前双指针,遇到space就说明一个字符结束了,然后把这个字符拷贝到ans里面,并加上一个space,最后再去掉最后的space就可以了
- 别人的思路:先反转整个string,然后再逐个反转单词这里需要
- 移除空格,这里没掌握好移除元素的精髓,竟然想了半天都没想到双指针移除
- 反转单词,这个比较简单
class Solution {
public:
//第一思路,从后向前双指针,遇到space就说明一个字符结束了,然后把这个字符拷贝到
//ans里面,并加上一个space,最后再去掉最后的space就可以了
string solutionA(string s)
{
string ans;
for(int n=s.length()-1;n>=0;n--)
{
if(s[n]==' ')
{
continue;
}
else{
int i=n;
while(i>=0&&s[i]!=' ')
{
i--;
}
ans+=s.substr(i+1, n-i);
ans+=' ';
n=i;
}
}
ans.erase(ans.length()-1);
return ans;
}
//第二方法
//类似27移除元素,感觉掌握的还是不够好啊,竟然没想到双指针
void removeSpace(string & s)
{
int slowptr=0;
int fastptr=0;
while(s[fastptr]==' ')
{
fastptr++;
}
for(;fastptr<s.length();fastptr++)
{
if(s[fastptr]==' '&&s[fastptr-1]==s[fastptr])
{
continue;
}
else
{
s[slowptr]=s[fastptr];
slowptr++;
}
}
s.resize(slowptr);
if(*(s.end()-1)==' ')
{
s.resize(s.length()-1);
}
}
void reverse(string & s,int start,int end)
{
while(start<end)
{
swap(s[start],s[end]);
start++;
end--;
}
}
string solutionB(string& s)
{
removeSpace(s);
std::reverse(s.begin(),s.end());
int start=0;
int end=0;
for(;end<s.length();end++)
{
while(end<s.length()&&s[end]!=' ')
{
end++;
}
reverse(s,start,end-1);
start=end+1;
}
return s;
}
//空间O(1)
string reverseWords(string s) {
return solutionB(s);
}
};
标签:string,space,int,反转,ans,指针
From: https://www.cnblogs.com/liviayu/p/17958006