From bb844aa46a5264408791fd30f07e363a454fbfd2 Mon Sep 17 00:00:00 2001 From: h2linlin Date: Thu, 13 May 2021 20:44:47 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=200151.=E7=BF=BB=E8=BD=AC?= =?UTF-8?q?=E5=AD=97=E7=AC=A6=E4=B8=B2=E9=87=8C=E7=9A=84=E5=8D=95=E8=AF=8D?= =?UTF-8?q?.md=20Java=E7=89=88=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- problems/0151.翻转字符串里的单词.md | 71 ++++++++++++++++++++ 1 file changed, 71 insertions(+) diff --git a/problems/0151.翻转字符串里的单词.md b/problems/0151.翻转字符串里的单词.md index d81c139d..13938fd9 100644 --- a/problems/0151.翻转字符串里的单词.md +++ b/problems/0151.翻转字符串里的单词.md @@ -212,6 +212,77 @@ public: Java: +```java +class Solution { + public String reverseWords(String s) { + char[] chars = s.toCharArray(); + // 1.双指针去除空格 + // 去除头尾空格 + int head = 0; + while (chars[head] == ' ') { + head ++; + } + int tail = chars.length - 1; + while (chars[tail] == ' ') { + tail --; + } + + // 去除中间空格 + int p1 = head; + int p2 = head + 1; + while (p2 <= tail) { + if (chars[p2 -1] == ' ' && chars[p2] == ' ') { + p2 ++; + continue; + } + chars[p1 + 1] = chars[p2]; + p1 ++; + p2 ++; + } + + tail = p1; + + // 2.双指针翻转整个字符串 + chars = reverse(chars, head, tail); + + // 3.双指针翻转每个单词 + p1 = head; + p2 = head; + + for (int i = head; i <= tail;) { + int add = 0; + while (i + add <= tail && chars[i + add] != ' ') { + add ++; + } + + if (i + add != tail) { + reverse(chars, i, i + add - 1); + i += add + 1; + } else { + reverse(chars, i, tail); + i = tail + 1; + } + } + + return new String(chars, head, tail - head + 1); + } + + char[] reverse(char[] chars, int begin, int end) { + int p1 = begin; + int p2 = end; + + while (p1 < p2) { + chars[p1] ^= chars[p2]; + chars[p2] ^= chars[p1]; + chars[p1] ^= chars[p2]; + + p1 ++; + p2 --; + } + return chars; + } +} +``` Python: