151.反转字符串中的单词

时游小于 1 分钟LeetCode

151.反转字符串中的单词

/*
 * @lc app=leetcode.cn id=151 lang=typescript
 *
 * [151] 反转字符串中的单词
 */

// @lc code=start
function reverseWords(s: string): string {
	let n = s.length - 1; // 17
	let l = findNotNullIndex(s.slice(0, s.length - 1), true); // 找到左侧不为空
	let res = [];

	while (n >= l) {
		// 从后往前找
		let r = findNotNullIndex(s.slice(0, n + 1), false);
		let l1 = r;

		while (r > l) {
			if (s[r] == " ") {
				res.push(s.slice(r + 1, l1 + 1));
				break;
			}
			r--;
		}
		if (r == l) {
			res.push(s.slice(r, l1 + 1));
		}
		n = r - 1;
	}
	return res.join(" ");
}

function findNotNullIndex(s: string, tag: boolean): number {
	// s表示字符串,tag表示从前往后还是从后往前s
	let index = 0;
	if (tag) {
		// 从前往后
		let l = 0;
		while (l < s.length) {
			if (s[l] != " ") {
				index = l;
				break;
			}
			l++;
		}
	} else {
		let r = s.length - 1;
		while (r >= 0) {
			// 从后往前
			if (s[r] != " ") {
				index = r;
				break;
			}
			r--;
		}
	}

	return index;
}

console.log(reverseWords("   hello    world                  "));

// @lc code=end

上次编辑于:
贡献者: 15327360835
Loading...