344. 反转字符串
void reverseString(vector<char>& s) {
for(int i=0;i<s.size()/2;i++){
char c;
c=s[i];
s[i]=s[s.size()-i-1];
s[s.size()-i-1]=c;
}
}
541. 反转字符串 II
string reverseStr(string s, int len) {
for(int i=0;i<s.size();i++){
int j=i+2*len-1;
int k=i+len-1;
if(j>=s.size()&&k>s.size()){
reverse(s.begin()+i,s.end());break;
}else if(j>=s.size()&&k<s.size()){
reverse(s.begin()+i,s.begin()+k+1);break;
}else if(j>=s.size()&&k==s.size()) {
reverse(s.begin(),s.begin()+k);break;
}else {
reverse(s.begin()+i,s.begin()+k+1);
i=j;
}
}
return s;
}
剑指 Offer 05. 替换空格
string replaceSpace(string s) {
string res;
for(int i=0;i<s.size();i++){
if(s[i]==' ') res+="%20";
else res+=s[i];
}
return res;
}
151. 反转字符串中的单词
string reverseWords(string s) {
string res;
vector<string> ss;
string xx[1010];
int len=0;
for(int i=0,j=0;i<s.size();i++,j++){
if(s[i]==' ')continue;
string temp;
while(s[j]!=' '&&j<s.size()) {
temp+=s[j];
j++;
}
ss.push_back(temp);
len++;
i=j;
}
for(int i=0;i<=ss.size()/2;i++){
int j=ss.size()-i-1;
xx[i]=ss[j];
xx[j]=ss[i];
}
for(int i=0;i<len;i++){
for(int j=0;j<xx[i].length();j++){
res+=xx[i][j];
}
if(i!=len-1) res+=" ";
}
return res;
}
剑指 Offer 58 - II. 左旋转字符串
string reverseLeftWords(string s, int n) {
string res;
res+=s.substr(n);
for(int i=0;i<n;i++) res+=s[i];
return res;
}
28. 找出字符串中第一个匹配项的下标
int strStr(string haystack, string needle) {
int sumh[haystack.size()];
int sumn=0;
for(int i=0;i<needle.size();i++) sumn+=needle[i]*needle[i];
sumh[0]=haystack[0]*haystack[0];
for(int i=1;i<haystack.size();i++){
sumh[i]=sumh[i-1]+haystack[i]*haystack[i];
}
for(int i=0;i<haystack.size();i++){
if(haystack[i]!=needle[0]) continue;
int end=i+needle.size()-1;
int hash;
if(end>=haystack.size()) return -1;
if(i>0) hash=sumh[end]-sumh[i-1];
else hash=sumh[end];
if(hash==sumn)
{
// cout<<i<<endl;
int flag=0;
for(int xx=i,z=0;xx<=end;xx++,z++)
if(haystack[xx]!=needle[z]) flag=1;
if(flag==0) return i;
}
}
return -1;
}
459. 重复的子字符串
int get(string s){
int res=0;
for(int i=0;i<s.size();i++) res+=s[i]*s[i];
return res;
}
bool repeatedSubstringPattern(string s) {
if(s.size()==1) return false;
int sums=get(s);
for(int len=1,i=0;len<=s.size()/2;len++){
if(sums%get(s.substr(0,len))==0){
string emp=s.substr(0,len);
int flag=0;
for(int start=0;start<s.size();){
string cmp=s.substr(start,len);
if(cmp!=emp) {
flag=1;break;
}
start+=len;
}
if(flag==0) return true;
}
}
return false;
}