【LetMeFly】2138.将字符串拆分为若干长度为 k 的组:模拟 力扣题目链接:https://leetcode.cn/problems/divide-a-string-into-groups-of-size-k/
字符串 s
可以按下述步骤划分为若干长度为 k
的组:
第一组由字符串中的前 k
个字符组成,第二组由接下来的 k
个字符串组成,依此类推。每个字符都能够成为 某一个 组的一部分。
对于最后一组,如果字符串剩下的字符 不足 k
个,需使用字符 fill
来补全这一组字符。
注意,在去除最后一个组的填充字符 fill
(如果存在的话)并按顺序连接所有的组后,所得到的字符串应该是 s
。
给你一个字符串 s
,以及每组的长度 k
和一个用于填充的字符 fill
,按上述步骤处理之后,返回一个字符串数组,该数组表示 s
分组后 每个组的组成情况 。
示例 1:
输入: s = "abcdefghi", k = 3, fill = "x"
输出: ["abc","def","ghi"]
解释:
前 3 个字符是 "abc" ,形成第一组。
接下来 3 个字符是 "def" ,形成第二组。
最后 3 个字符是 "ghi" ,形成第三组。
由于所有组都可以由字符串中的字符完全填充,所以不需要使用填充字符。
因此,形成 3 组,分别是 "abc"、"def" 和 "ghi" 。
示例 2:
输入: s = "abcdefghij", k = 3, fill = "x"
输出: ["abc","def","ghi","jxx"]
解释:
与前一个例子类似,形成前三组 "abc"、"def" 和 "ghi" 。
对于最后一组,字符串中仅剩下字符 'j' 可以用。为了补全这一组,使用填充字符 'x' 两次。
因此,形成 4 组,分别是 "abc"、"def"、"ghi" 和 "jxx" 。
提示:
1 <= s.length <= 100
s
仅由小写英文字母组成
1 <= k <= 100
fill
是一个小写英文字母
解题方法:模拟 1 2 3 4 5 6 7 for (int i = 0 ; i < len (s); i += k) { if (剩下字符串还有k个) { 取子串 } else { 取剩下字符串+fill填充 } }
时间复杂度$O(len(s))$
空间复杂度$O(1)$,力扣返回值不计入算法空间复杂度
AC代码 C++ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 class Solution {public : vector<string> divideString (string s, int k, char fill) { vector<string> ans; for (int i = 0 ; i < s.size (); i += k) { if (s.size () - i < k) { ans.push_back (s.substr (i, s.size () - i) + string (k - (s.size () - i), fill)); } else { ans.push_back (s.substr (i, k)); } } return ans; } };
Python 1 2 3 4 5 6 7 8 9 10 11 12 13 ''' Author: LetMeFly Date: 2025-06-22 12:43:34 LastEditors: LetMeFly.xyz LastEditTime: 2025-06-22 20:55:30 ''' from typing import List class Solution : def divideString (self, s: str , k: int , fill: str ) -> List [str ]: return [s[i:i+k] + fill * (k - (len (s) - i)) for i in range (0 , len (s), k)]
Java 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 class Solution { public String[] divideString(String s, int k, char fill) { String[] ans = new String [(s.length() + k - 1 ) / k]; for (int i = 0 ; i < s.length(); i += k) { if (s.length() - i < k) { ans[i / k] = s.substring(i) + String.valueOf(fill).repeat(k - (s.length() - i)); } else { ans[i / k] = s.substring(i, i + k); } } return ans; } }
Go 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 package mainimport "strings" func divideString (s string , k int , fill byte ) []string { ans := make ([]string , 0 , (len (s) + k - 1 ) / k) for i := 0 ; i < len (s); i += k { if len (s) - i < k { ans = append (ans, s[i:] + strings.Repeat(string (fill), k - (len (s) - i))) } else { ans = append (ans, s[i:i+k]) } } return ans }
同步发文于CSDN 和我的个人博客 ,原创不易,转载经作者同意后请附上原文链接 哦~
千篇源码题解已开源