344.反转字符串
C++:
class Solution {
public:
void reverseString(vector<char>& s) {
for(int i=0,j=s.size()-1;i<(s.size()/2);i++,j--){
/*
if(s[i]>='A'&&s[i]<='Z') s[i]=(s[i]-'A')+'a';
if(s[j]>='A'&&s[j]<='Z') s[j]=(s[j]-'A')+'a';*/
swap(s[i],s[j]);
}
}
};
C#:
public class Solution {
public void ReverseString(char[] s) {
for(int i=0,j=s.Length-1;i<j;i++,j--){
(s[i],s[j])=(s[j],s[i]);
}
}
}
541. 反转字符串II
C++:
注意reverse自带库开闭区间
class Solution {
public:
void reverseTemp(string &s,int firstIndex,int secondIndex){
for(int i=firstIndex,j=secondIndex;i<j;i++,j--){
swap(s[i],s[j]);
}
}
string reverseStr(string s, int k) {
for(int i=0;i<s.size();i+=(2*k)){
// 1. 每隔 2k 个字符的前 k 个字符进行反转
// 2. 剩余字符小于 2k 但大于或等于 k 个,则反转前 k 个字符
if(i+k<=s.size())
//reverse(s.begin()+i,s.begin()+i+k);
reverseTemp(s,i,i+k-1);
else
// 3. 剩余字符少于 k 个,则将剩余字符全部反转。
//reverse(s.begin()+i,s.end());
reverseTemp(s,i,s.size()-1);
}
return s;
}
};
注意reverse自带库开闭区间【reverse(,)第二个空相当于长度】
class Solution {
public:
string reverseStr(string s, int k) {
for(int i=0;i<s.size();i+=(2*k)){
// 1. 每隔 2k 个字符的前 k 个字符进行反转
// 2. 剩余字符小于 2k 但大于或等于 k 个,则反转前 k 个字符
if(i+k<=s.size())
reverse(s.begin()+i,s.begin()+i+k);//reverse(,)第二个空相当于长度
else
// 3. 剩余字符少于 k 个,则将剩余字符全部反转。
reverse(s.begin()+i,s.end());
}
return s;
}
};
C#:
需注意char[] arr转换成string
public class Solution {
void ReverseStr1(char[]arr,int firstIndex,int secondIndex){
for(int i=firstIndex,j=secondIndex;i<j;i++,j--){
(arr[i],arr[j])=(arr[j],arr[i]);
}
}
public string ReverseStr(string s, int k) {
char[] arr=s.ToCharArray();
// 1. 每隔 2k 个字符的前 k 个字符进行反转
// 2. 剩余字符小于 2k 但大于或等于 k 个,则反转前 k 个字符
for(int i=0;i<arr.Length;i+=2*k){
if(i+k<=s.Length)
ReverseStr1(arr,i,i+k-1);
else
ReverseStr1(arr,i,arr.Length-1);
}
string s1=new string(arr);
return s1;
}
}
05.替换空格
C++:
temp:
class Solution {
public:
string replaceSpace(string s) {
string temp="";
for(int i=0;i<s.size();i++){
if(s[i]!=' ') temp+=s[i];
else temp=temp+"%20";
}
return temp;
}
};
s:
class Solution {
public:
string replaceSpace(string s) {
int count=0;//统计空格的个数
int sOldSize=s.size();
for(int i=0;i<sOldSize;i++){
if(s[i]==' ') count++;
}
//扩充字符串S的大小,也就是每个空格替换成
s.resize(s.size()+count*2);
int sNewSize=s.size();
//i->new j->old
for(int i=sNewSize-1,j=sOldSize-1;j<i;j--,i--){
if(s[j]!=' ')
s[i]=s[j];
else{
s[i]='0';
s[i-1]='2';
s[i-2]='%';
i-=2;
}
}
return s;
}
};
C#:
public class Solution {
public string ReplaceSpace(string arr) {
int count=0;//统计空格的个数
char[] s=arr.ToCharArray();
int sOldSize=s.Length;
for(int i=0;i<sOldSize;i++){
if(s[i]==' ') count++;
}
//扩充字符串S的大小,也就是每个空格替换成
//s.resize(s.Length+count*2);
//s=Array.Resize(s,s.Length+count*2);
char[] s2=new char[s.Length+count*2];
for(int i=0;i<arr.Length;i++){ //遍历s数组,把该数组的元素全部赋值给s2数组
s2[i]=s[i];
}
s=s2; //把临时数组赋值给原数组,这时原数组已经扩容
int sNewSize=s.Length;
//i->new j->old
for(int i=sNewSize-1,j=sOldSize-1;j<i;j--,i--){
if(s[j]!=' ')
s[i]=s[j];
else{
s[i]='0';
s[i-1]='2';
s[i-2]='%';
i-=2;
}
}
string s1=new string(s);
return s1;
}
}
151.翻转字符串里的单词
151. Reverse Words in a String
C++:
注意这里的reverse 是自己定义的,不是自带库的reverse。
class Solution {
public:
void reverse(string &s,int start,int end){//翻转,左闭右闭
for(int i=start,j=end;i<j;i++,j--){
swap(s[i],s[j]);
}
}
void removeExtraSpace(string&s){
int slow=0;
for(int i=0;i<s.size();i++){
if(s[i]!=' '){ //遇到非空格就处理,即删除所有空格
//手动控制空格,给单词之间添加空格。slow != 0说明不是第一个单词,需要在单词前添加空格。
if(slow!=0) s[slow++]=' ';
while(i<s.size()&&s[i]!=' '){//补上该单词,遇到空格说明单词结束。
s[slow++]=s[i++];
}
}
}
s.resize(slow);
}
string reverseWords(string s) {
removeExtraSpace(s);//去掉多余空格
reverse(s,0,s.size()-1);
int start=0;
for(int i=0;i<=s.size();i++){
if(i==s.size()||s[i]==' '){
reverse(s,start,i-1);
start=i+1;
}
}
return s;
}
};
58-II.左旋转字符串
C++:
class Solution {
public:
string reverseLeftWords(string s, int n) {
string temp="";
int fast=0;int slow=0;
while(n--){
temp+=s[fast];
fast++;
}
while(fast<s.size()){
s[slow++]=s[fast];
fast++;
}
while(slow<s.size()){
/* for(int i=0;i<temp.size();i++){
s[slow]=temp[i];
slow++;
}*/
for(char c:temp)
s[slow++]=c;
}
return s;
}
};
三转:
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;
}
};