Reverse Words in a String (M)
題目
Given an input string, reverse the string word by word.
Example 1:
Input: "the sky is blue"
Output: "blue is sky the"
Example 2:
Input: " hello world! "
Output: "world! hello"
Explanation: Your reversed string should not contain leading or trailing spaces.
Example 3:
Input: "a good example"
Output: "example good a"
Explanation: You need to reduce multiple spaces between two words to a single space in the reversed string.
Note:
- A word is defined as a sequence of non-space characters.
- Input string may contain leading or trailing spaces. However, your reversed string should not contain leading or trailing spaces.
- You need to reduce multiple spaces between two words to a single space in the reversed string.
題意
將給定字串中的非空格單詞的順序逆置,要求新字串中前后無空白字符,且每個單詞之間有一個空格,
思路
將字串中所有單詞依次存入堆疊中,再出堆疊構建新字串即可,
代碼實作
Java
class Solution {
public String reverseWords(String s) {
s = s.trim();
Deque<String> stack = new ArrayDeque<>();
StringBuilder sb = new StringBuilder();
int first = 0, last = 0;
while (last < s.length()) {
while (last < s.length() && s.charAt(last) != ' ') {
last++;
}
stack.push(s.substring(first, last));
while (last < s.length() && s.charAt(last) == ' ') {
last++;
}
first = last;
}
for (String word : stack) {
if (sb.length() == 0) {
sb.append(word);
} else {
sb.append(" " + word);
}
}
return sb.toString();
}
}
JavaScript
API
/**
* @param {string} s
* @return {string}
*/
var reverseWords = function(s) {
return s.trim().split(/\s+/).reverse().join(' ')
};
堆疊
/**
* @param {string} s
* @return {string}
*/
var reverseWords = function (s) {
s = s.trim()
let word = ''
let stack = []
for (let c of s) {
if (c !== ' ') {
word += c
} else if (word.length !== 0) {
stack.push(word)
word = ''
}
}
if (word.length !== 0) {
stack.push(word)
}
let t = ''
while (stack.length !== 0) {
if (t.length !== 0) {
t += ' '
}
t += stack.pop()
}
return t
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/21334.html
標籤:其他
上一篇:KMP演算法
