3324. 出现在屏幕上的字符串序列
给你一个字符串 target
。
Alice 将会使用一种特殊的键盘在她的电脑上输入 target
,这个键盘 只有两个 按键:
'a'
。'c'
变为 'd'
,'z'
变为 'a'
。注意,最初屏幕上是一个空字符串 ""
,所以她 只能 按按键 1。
请你考虑按键次数 最少 的情况,按字符串出现顺序,返回 Alice 输入 target
时屏幕上出现的所有字符串列表。
示例 1:
输入: target = "abc"
输出: ["a","aa","ab","aba","abb","abc"]
解释:
Alice 按键的顺序如下:
"a"
。"aa"
。"ab"
。"aba"
。"abb"
。"abc"
。示例 2:
输入: target = "he"
输出: ["a","b","c","d","e","f","g","h","ha","hb","hc","hd","he"]
提示:
1 <= target.length <= 400
target
仅由小写英文字母组成。相似题目
原站题解
cpp 解法, 执行用时: 29 ms, 内存消耗: 92.4 MB, 提交时间: 2024-10-23 09:29:58
class Solution { public: vector<string> stringSequence(string target) { vector<string> ans; string s; for (int c : target) { s += 'a'; // 占位 for (char j = 'a'; j <= c; j++) { s.back() = j; ans.push_back(s); } } return ans; } };
java 解法, 执行用时: 6 ms, 内存消耗: 54.4 MB, 提交时间: 2024-10-23 09:29:44
class Solution { List<String> stringSequence(String target) { List<String> ans = new ArrayList<>(); StringBuilder s = new StringBuilder(); for (int c : target.toCharArray()) { s.append('a'); // 占位 for (char j = 'a'; j <= c; j++) { s.setCharAt(s.length() - 1, j); ans.add(s.toString()); } } return ans; } }
golang 解法, 执行用时: 5 ms, 内存消耗: 14.9 MB, 提交时间: 2024-10-23 09:29:34
func stringSequence(target string) (ans []string) { s := make([]byte, len(target)) for i, c := range target { for j := byte('a'); j <= byte(c); j++ { s[i] = j ans = append(ans, string(s[:i+1])) } } return }
python3 解法, 执行用时: 59 ms, 内存消耗: 25.4 MB, 提交时间: 2024-10-23 09:29:15
class Solution: def stringSequence(self, target: str) -> List[str]: ans = [] s = [] for c in target: s.append('') # 占位 for s[-1] in ascii_lowercase[:ord(c) - ord('a') + 1]: ans.append(''.join(s)) return ans
python3 解法, 执行用时: 7 ms, 内存消耗: 25.5 MB, 提交时间: 2024-10-23 09:27:26
class Solution: def stringSequence(self, target: str) -> List[str]: ans = [] c = '' for m in target: ans += [c+chr(m) for m in range(ord('a'), ord(m)+1)] c = ans[-1] return ans