单词反转算法

问题描述:颠倒一个句子中的词的顺序,比如将Alice call Jack转换为Jack call Alice,实现速度最快,移动最少。

算法思想

  1. 写一个反转字符串的函数(二分,语言自带都可以)
  2. 遍历字符串,然后把每个单词都翻转过来
  3. 最后把整个字符串翻转过来。

初始状况

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
A l i c e 32 c a l l 32 J a c k \0

将所有单词翻转后

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
e c i l A 32 l l a c 32 k c a J \0

最后再全部翻转

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
J a c k 32 c a l l 32 A l i c e \0
void reverse_word(char* word_start, int word_len) {
	char* left = word_start;
	char* right = word_start + word_len - 1;
	for (; left < right; right--, left++)
	{
		swap(*left, *right);
	}
}

void reverse(char* str) {
	char* current_pos = str;
	while (*current_pos) {
		while (*current_pos == ' ') current_pos++;
		char* word_start = current_pos;

		while (*current_pos != ' ' && *current_pos) current_pos++;

		reverse_word(word_start, current_pos - word_start);
	}//遍历结束

	reverse_word(str, strlen(str));
}

// 逆转测试函数
void testReverse(void) {
	char str[128] = "Alice call Jack";
	reverse(str);
	std::cout << "处理后:" << str << std::endl;
}

int main(void) {
	testReverse();
	system("pause");
}
常见的快乐算法 文章被收录于专栏

一些简单的算法题目,不想浪费这些快乐

全部评论
这是运行成功的吗
点赞 回复 分享
发布于 2023-01-31 15:48 山东
哈哈,文章写的很烂,大家看下一篇吧
点赞 回复 分享
发布于 2023-05-29 21:31 湖南

相关推荐

头像
11-09 17:30
门头沟学院 Java
TYUT太摆金星:我也是,好几个华为的社招找我了
点赞 评论 收藏
分享
4 1 评论
分享
牛客网
牛客企业服务