網(wǎng)站后臺(tái)添加投票系統(tǒng)電子商務(wù)網(wǎng)站建設(shè)方案
給定一個(gè)字符串?s
?和一個(gè)整數(shù)?k
,從字符串開頭算起,每計(jì)數(shù)至?2k
?個(gè)字符,就反轉(zhuǎn)這?2k
?字符中的前?k
?個(gè)字符。
- 如果剩余字符少于?
k
?個(gè),則將剩余字符全部反轉(zhuǎn)。 - 如果剩余字符小于?
2k
?但大于或等于?k
?個(gè),則反轉(zhuǎn)前?k
?個(gè)字符,其余字符保持原樣。
示例 1:
輸入:s = "abcdefg", k = 2 輸出:"bacdfeg"
示例 2:
輸入:s = "abcd", k = 2 輸出:"bacd"
提示:
1 <= s.length <= 10^4
s
?僅由小寫英文組成1 <= k <= 10^4
分析:直接按題意進(jìn)行模擬。反轉(zhuǎn)每個(gè)下標(biāo)從?2k?的倍數(shù)開始的,長度為?k?的子串。若該子串長度不足?k,則反轉(zhuǎn)整個(gè)子串。
char* reverseStr(char* s, int k) {int len=strlen(s),f=1,index=0;char *ans=(char*)malloc(sizeof(char)*(len+1));ans[len]=0;for(int i=0;i<len;i=i+k*2){if(i+k>=len){for(int j=len-1;j>=i;--j)ans[index++]=s[j];}else if(i+2*k>=len){for(int j=i+k-1;j>=i;--j)ans[index++]=s[j];for(int j=i+k;j<len;++j)ans[index++]=s[j];}else{for(int j=i+k-1,t=0;t<k;--j,++t)ans[index++]=s[j];for(int j=i+k,t=0;t<k;++j,++t)ans[index++]=s[j];}}return ans;
}