344.反转字符串
比较简单
541. 反转字符串II
一开始自己的逻辑没写通,记录一下
1. 注意传参的时候要引用,别忘了
class Solution {
public:
//一开始自己写的,没跑通
//反转字符串的一部分,m是初始下标,n是结束下标
void reverse(string& s,int m,int n)
{
int loop=(n-m+1)/2;
while(loop)
{
swap(s[m],s[n]);
m++;
n--;
loop--;
}
}
string reverseStr(string s, int k) {
//做循环计数,剩下的字符可以if直接判断
int count=0;
for(int i=0;i<s.size();i++)
{
if((i+1)%(2*k)==0)
{
/*
reverse(s,i/2-k,i/2);
i/2不能这么写,不是折半
*/
reverse(s,i-2*k+1,i-2*k+1+k);
count++;
}
}
//通过count计算出剩余元素多少个
int residue=s.size()-count*2*k;
if(residue<k)
{
//反转剩下所有
reverse(s,count*2*k+1,s.size()-1);
}
else
{
//反转前k个
reverse(s,count*2*k+1,count*2*k+1+k);
}
return s;
}
};
class Solution {
public:
//反转字符串的一部分,m是初始下标,n是结束下标
//string& s才行,不然没有改变数值。注意要引用
void reverse(string& s,int m,int n)
{
int loop=(n-m+1)/2;
while(loop)
{
swap(s[m],s[n]);
m++;
n--;
loop--;
}
}
string reverseStr(string s, int k) {
//做循环计数,剩下的字符可以if直接判断
for(int i=0;i<s.size();i=i+2*k)
{
//这两句有点没想明白
if(i+k<=s.size())
{
reverse(s,i,i+k-1);
}
//
else
{
reverse(s,i,s.size()-1);
}
}
return s;
}
};
卡码网:54.替换数字
次日补的
1. 在字符串或者数组中,扩展长度,并替换元素,使用双指针法的时候,从后面往前面填充,减少时间复杂度
2. 字符串string和 vector有点像,是可以扩容的。 s.resize(扩容后的长度)
3. 字符串string的使用和其库函数都不太熟悉
#include <iostream>
using namespace std;
int main()
{
string s;
while(cin>>s)
{
int soldindex=s.size()-1;
int count=0;
for(int i=0;i<s.size();i++)
{
if(s[i]>='0' && s[i]<='9')
{
count++;
}
}
s.resize(s.size()+count*5);
int snewindex=s.size()-1;
while(soldindex>=0)
{
if(s[soldindex]>='0' && s[soldindex]<='9')
{
s[snewindex--]='r';
s[snewindex--]='e';
s[snewindex--]='b';
s[snewindex--]='m';
s[snewindex--]='u';
s[snewindex--]='n';
soldindex--;
}
else
{
s[snewindex--]=s[soldindex--];
}
}
cout<<s<<endl;
}
}