反转字符串中的单词
给定一个字符串,你需要反转字符串中每个单词的字符顺序,同时仍保留空格和单词的初始顺序
问题分析:此类问题,很明显两种解法,第一种为空间换时间,首先定义一个数组,长度与原来类似,在遍历过程中,遇到空格则执行一次反转,且每次记录位置,这样就能得到一个新的数组,且数组中每个单词都是反转了的。代码如下:
char* reverseWords(char* s) {
int length = strlen(s);
char* ret = (char*)malloc(sizeof(char) * (length + 1));//定义一个数组存储需要逆置的字符
ret[length] = 0;
int i = 0;
while (i < length) {
int start = i;//记录每个单词的位置
while (i < length && s[i] != ' ') {
i++;//单词长度
}
for (int p = start; p < i; p++) {
ret[p] = s[start + i - 1 - p];//逆序存放
}
while (i < length && s[i] == ' ') {
ret[i] = ' ';//放入空格
i++;
}
}
return ret;
}
复杂度分析:
时间复杂度:遍历所有的字符,且均需反转,O(n);
空间复杂度:开辟与原数组大小相同的数组,因此辅助空间为O(n),空间复杂度为O(n)。