本文共 3326 字,大约阅读时间需要 11 分钟。
8 第四章 字符串
● 344.反转字符串
● 541. 反转字符串II ● 剑指Offer 05.替换空格 ● 151.翻转字符串里的单词 ● 剑指Offer58-II.左旋转字符串344.反转字符串
void swap(char* a, char* b) { char temp=*a; * a = *b; * b = temp; } void reverseString(char* s, int sSize) { int left = 0; int right = sSize - 1; for (; left < right;) { swap(&s[left++], &s[right--]); } }
非常简单,双指针轻松秒杀。
void swap(char* a, char* b) { char temp=*a; * a = *b; * b = temp; } void reverseString(char* s, int sSize) { int left = 0; int right = sSize - 1; for (; left < right;) { swap(&s[left++], &s[right--]); } }char* reverseStr(char* s, int k) { int n = strlen(s); for (int i = 0; i < n; i+=2*k) { int last = n - i; if (2*k>last>k) { reverseString(&s[i], k); break; } if (last
不要把自己限制死了,这里可以用i+2K这样写出来的代码更加精巧。
剑指Offer 05.替换空格
char* replaceSpace(char* s){ int count=0; int sOldSize=strlen(s); for(int i=0;i=0;i--,j--) { if(s[i]!=' '){ newS[j]=s[i]; }else{ newS[j--]='0'; newS[j--]='2'; newS[j]='%';//此处多加小心 } } newS[newlen]='\0'; return newS;}
通过预先创建大小正确的字符串儿,然后再通过双指针。挪动填充整个串儿完成。
151.翻转字符串里的单词
void swap(char* a, char* b){ char temp = *a; *a = *b; *b = temp;}void reverseString(char* s, int sSize) { // 344.反转字符串 int left = 0; int right = sSize - 1; for (; left < right;) { swap(&s[left++], &s[right--]); }}char* reverseWords(char* s) { int length = strlen(s); reverseString(s, length); int fast = 0, slow = 0; if (length <= 1) { if (s[0] == ' ') { return NULL; } else { return s; } } for (; fast < length; ) { while (s[fast] == ' ' && fast < length) { fast++; } slow = fast; while (s[fast] != ' ' && fast < length) { fast++; } reverseString(&s[slow], fast - slow); } while (fast < length && s[fast] == ' ') { fast++; } slow = 0; fast = 0; while (fast < length && s[fast] == ' ') { fast++; } for (; fast < length; fast++) { if (fast - 1 > 0 && s[fast - 1] == s[fast] && s[fast] == ' ') { continue; } else { s[slow++] = s[fast]; } } if (slow - 1 > 0 && s[slow - 1] == ' ') { // 去掉字符串末尾的空格 s[slow-1] = '\0'; } else { s[slow] = '\0';// 重新设置字符串大小 } return s;}
将前面的题结合起来,就是这道题的答案了。
剑指Offer58-II.左旋转字符串
void swap(char* a, char* b){ char temp = *a; *a = *b; *b = temp;}void reverseString(char* s, int sSize) { // 344.反转字符串 int left = 0; int right = sSize - 1; for (; left < right;) { swap(&s[left++], &s[right--]); }}char* reverseLeftWords(char* s, int n) { int length = strlen(s); reverseString(s,length); reverseString(s,length-n); reverseString(&s[length-n],n); return s;}
让我想起了一种加密方式就是把字母整体向左移或者右移多少,应该这种加密方式最后写出来的代码也跟这个类似吧。
有没有可能我说的他是一道题?转载地址:http://ttvduy.baihongyu.com/