class Solution {
public:
string finalString(string s) {
}
};
6925. 故障键盘
你的笔记本键盘存在故障,每当你在上面输入字符 'i'
时,它会反转你所写的字符串。而输入其他字符则可以正常工作。
给你一个下标从 0 开始的字符串 s
,请你用故障键盘依次输入每个字符。
返回最终笔记本屏幕上输出的字符串。
示例 1:
输入:s = "string" 输出:"rtsng" 解释: 输入第 1 个字符后,屏幕上的文本是:"s" 。 输入第 2 个字符后,屏幕上的文本是:"st" 。 输入第 3 个字符后,屏幕上的文本是:"str" 。 因为第 4 个字符是 'i' ,屏幕上的文本被反转,变成 "rts" 。 输入第 5 个字符后,屏幕上的文本是:"rtsn" 。 输入第 6 个字符后,屏幕上的文本是: "rtsng" 。 因此,返回 "rtsng" 。
示例 2:
输入:s = "poiinter" 输出:"ponter" 解释: 输入第 1 个字符后,屏幕上的文本是:"p" 。 输入第 2 个字符后,屏幕上的文本是:"po" 。 因为第 3 个字符是 'i' ,屏幕上的文本被反转,变成 "op" 。 因为第 4 个字符是 'i' ,屏幕上的文本被反转,变成 "po" 。 输入第 5 个字符后,屏幕上的文本是:"pon" 。 输入第 6 个字符后,屏幕上的文本是:"pont" 。 输入第 7 个字符后,屏幕上的文本是:"ponte" 。 输入第 8 个字符后,屏幕上的文本是:"ponter" 。 因此,返回 "ponter" 。
提示:
1 <= s.length <= 100
s
由小写英文字母组成s[0] != 'i'
原站题解
rust 解法, 执行用时: 0 ms, 内存消耗: 2.1 MB, 提交时间: 2024-04-01 09:27:26
use std::collections::VecDeque; impl Solution { pub fn final_string(s: String) -> String { let mut q = VecDeque::new(); let mut tail = true; for c in s.chars() { if c == 'i' { tail = !tail; // 修改添加方向 } else if tail { q.push_back(c); // 加尾部 } else { q.push_front(c); // 加头部 } } if tail { q.iter().collect() } else { q.iter().rev().collect() } } }
javascript 解法, 执行用时: 99 ms, 内存消耗: 54.5 MB, 提交时间: 2024-04-01 09:27:07
/** * @param {string} s * @return {string} */ var finalString = function(s) { const q = [[], []] // 两个 list 背靠背,q[0] 向左,q[1] 向右 let dir = 1; for (const c of s) { if (c === 'i') { dir ^= 1; // 修改添加方向 } else { q[dir].push(c); } } return q[dir ^ 1].reverse().concat(q[dir]).join(''); };
golang 解法, 执行用时: 4 ms, 内存消耗: 3.2 MB, 提交时间: 2023-08-07 15:13:17
func finalString(s string) string { qs := [2][]rune{} tail := 1 for _, c := range s { if c == 'i' { tail ^= 1 } else { qs[tail] = append(qs[tail], c) } } q := qs[tail^1] for i, n := 0, len(q); i < n/2; i++ { q[i], q[n-1-i] = q[n-1-i], q[i] } return string(append(q, qs[tail]...)) }
cpp 解法, 执行用时: 8 ms, 内存消耗: 10.2 MB, 提交时间: 2023-08-07 15:12:41
class Solution { public: string finalString(string s) { deque<char> q; bool tail = true; for (char c: s) { if (c == 'i') tail = !tail; else if (tail) q.push_back(c); else q.push_front(c); } return tail ? string(q.begin(), q.end()) : string(q.rbegin(), q.rend()); } };
java 解法, 执行用时: 4 ms, 内存消耗: 42.7 MB, 提交时间: 2023-08-07 15:12:21
class Solution { public String finalString(String s) { var q = new ArrayDeque<Character>(); var tail = true; for (var c : s.toCharArray()) { if (c == 'i') tail = !tail; else if (tail) q.addLast(c); else q.addFirst(c); } var ans = new StringBuilder(); for (var c : q) ans.append(c); if (!tail) ans.reverse(); return ans.toString(); } }
python3 解法, 执行用时: 48 ms, 内存消耗: 16 MB, 提交时间: 2023-08-07 15:11:51
''' 把反转看做后续往字符串头部添加字符,用双端队列实现 ''' class Solution: def finalString(self, s: str) -> str: q = deque() tail = True for c in s: if c == 'i': tail = not tail # 修改添加方向 elif tail: # 加尾部 q.append(c) else: # 加头部 q.appendleft(c) return ''.join(q if tail else reversed(q))