https://leetcode.com/problems/reverse-words-in-a-string/description/
各种非法输入很多的题了
人生第一次面试是大四腾讯实习生面试,然后但是啥都不会,面试的算法题就是这个,当时现场想的。
如今已经2年多过去了,国内已经面完了,T的面试结果这周出...
感慨万千...
void reverse(char *s, int sz) {
for (int i = 0; i < sz/2; i++) {
char t = *(s + i);
*(s+i) = *(s + sz - i - 1);
*(s + sz - i - 1) = t;
}
}
void format(char *s, int sz) {
int ptr = 0;
for (int i = 0; i < sz; ) {
if (s[i] != ' ') {
s[ptr] = s[i];
ptr++;
i++;
} else {
if (!ptr) {
i++;
} else {
if (s[ptr-1] == ' ') {
i++;
} else {
s[ptr] = s[i];
i++;
ptr++;
}
}
}
}
if (ptr && s[ptr-1] == ' ') ptr--;
s[ptr] = '\0';
}
void reverseWords(char *s) {
int sz = strlen(s);
format(s, sz);
sz = strlen(s);
reverse(s, sz);
int last = 0;
for (int i = 0; i < sz; i++) {
if (s[i] == ' ' ) {
reverse(s+last, i - last);
last = i+1;
} else {
if (i == sz - 1) {
reverse(s+last, i - last + 1);
}
}
}
}