计算机基础

leetcode题目-翻转字符串里的单词

151. 翻转字符串里的单词

给定一个字符串,逐个翻转字符串中的每个单词。

说明:

  • 无空格字符构成一个 单词 。
  • 输入字符串可以在前面或者后面包含多余的空格,但是反转后的字符不能包括。
  • 如果两个单词间有多余的空格,将反转后单词间的空格减少到只含一个。

来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/reverse-words-in-a-string

go语言实现:

func reverseWords(s string) string {
	if len(s) == 0 || !strings.ContainsRune(s, ' ') {
		return s
	}
	var sb strings.Builder
	var start int
	var end  = -1
	for i := len(s) - 1; i >= 0; i-- { //从右往左遍历
		if s[i] != ' ' { //遇到非空格字符
			if end == -1 { //设置end
				end = i + 1
			}
		}

		if end != -1 { //已经设置了end
			if s[i] == ' ' { //遇到空格
				start = i+1 //设置start
				sb.WriteString(s[start:end]) //写入单词
				sb.WriteRune(' ')  //再写入一个空格
				end = -1
				continue
			}

			if i == 0 { //没遇到空格但是到结尾了
				sb.WriteString(s[0:end]) //写入单词
				sb.WriteRune(' ') //写入空格
			}

		}
	}
	return sb.String()[0: len(sb.String()) - 1] //去掉最后一个空格
}

关于作者

程序员,软件工程师,java, golang, rust, c, python,vue, Springboot, mybatis, mysql,elasticsearch, docker, maven, gcc, linux, ubuntu, centos, axum,llm, paddlepaddle, onlyoffice,minio,银河麒麟,中科方德,rpm