
(关注数据结构和算法,了解更多新知识)
最近网上一网友问:为何程序员的老婆都很漂亮,以前没注意到这个问题,今天还特意看了一下,那真是:
沉鱼落雁,闭月羞花
倾国倾城,婀娜多姿
仪态万方,秀外慧中
貌美如花,冰雪聪明
眉清目秀,天生丽质
国色天香,桃羞杏让
燕妒莺惭,一笑倾城
明眸皓齿,楚楚动人
娇艳欲滴,风姿绰约
亭亭玉立,千娇百媚
温婉娴淑,貌若天仙
风华绝代,花容月貌
美艳绝世,清丽绝俗
温柔贤惠,绝代佳人
冰肌玉骨,眉目如画
当然情人眼里出西施,无论怎么夸都不为过
,今天的算法题比较简单,学习算法的同时还可以学习下夸人的成语,一举两得,保存收藏,说不定以后可以用上。

我个人认为从事程序员这一行业的女的都很聪明,聪明的女性看起来肯定漂亮,还有就是很多程序员都是996,和老婆接触的时间少,距离产生美
,我们来看下其他网友的回复:








--------------下面是今天的算法题--------------
来看下今天的算法题,这题是LeetCode的第830:较大分组的位置。
问题描述
来源:LeetCode第830题
难度:简单
在一个由小写字母构成的字符串 s 中,包含由一些连续的相同字符所构成的分组。
例如,在字符串 s = "abbxxxxzyy" 中,就含有 "a", "bb", "xxxx", "z" 和 "yy" 这样的一些分组。
分组可以用区间 [start, end] 表示,其中 start 和 end 分别表示该分组的起始和终止位置的下标。上例中的 "xxxx" 分组用区间表示为 [3,6] 。
我们称所有包含大于或等于三个连续字符的分组为较大分组 。找到每一个较大分组的区间,按起始位置下标递增顺序排序后,返回结果。
示例1:
输入:s = "abbxxxxzzy"
输出:[[3,6]]
解释:"xxxx" 是一个起始于 3 且终止于 6 的较大分组。
示例2:
输入:s = "abcdddeeeeaabbbcd"
输出:[[3,5],[6,9],[12,14]]
解释:较大分组为 "ddd", "eeee" 和 "bbb"
1 <= s.length <= 1000
s 仅含小写英文字母
问题分析
较大分组实际上就是找到所有连续的3个及以上的字符,记录下他们的起始位置。这题比较简单,我们直接模拟即可。
JAVA:
public List<List<Integer>> largeGroupPositions(String s) {
List<List<Integer>> ans = new ArrayList<>();
int left = 0;// 相同字符串左边边界
int length = s.length();
while (left < length) {
int count = 1;// 相同字符串的长度
// 统计相同字符串的长度
while (left + count < length && s.charAt(left) == s.charAt(left + count))
count++;
// 如果长度大于等于3,就把他加入到res中
if (count >= 3)
ans.add(Arrays.asList(left, left + count - 1));
// 更新下一个字符串的左边边界
left += count;
}
return ans;
}
C++:
public:
vector<vector<int>> largeGroupPositions(string s) {
vector<vector<int>> ans;
int left = 0;// 相同字符串左边边界
int length = s.size();
while (left < length) {
int count = 1;// 相同字符串的长度
// 统计相同字符串的长度
while (left + count < length && s[left] == s[left + count])
count++;
// 如果长度大于等于3,就把他加入到res中
if (count >= 3)
ans.push_back({left, left + count - 1});
// 更新下一个字符串的左边边界
left += count;
}
return ans;
}
C:
int **largeGroupPositions(char *s, int *returnSize, int **returnColumnSizes) {
int **ans = malloc(350 * sizeof(int *));
*returnSize = 0;
*returnColumnSizes = malloc(350 * sizeof(int));
int left = 0;// 相同字符串左边边界
int length = strlen(s);
while (left < length) {
int count = 1;// 相同字符串的长度
// 统计相同字符串的长度
while (left + count < length && s[left] == s[left + count])
count++;
// 如果长度大于等于3,就把他加入到res中
if (count >= 3) {
ans[*returnSize] = malloc(2 * sizeof(int));
ans[*returnSize][0] = left;
ans[*returnSize][1] = left + count - 1;
(*returnColumnSizes)[(*returnSize)++] = 2;
}
// 更新下一个字符串的左边边界
left += count;
}
return ans;
}
Python:
def largeGroupPositions(self, s: str) -> List[List[int]]:
ans = []
left = 0 # 相同字符串左边边界
length = len(s)
while left < length:
count = 1 # 相同字符串的长度
# 统计相同字符串的长度
while left + count < length and s[left] == s[left + count]:
count += 1
# 如果长度大于等于3,就把他加入到res中
if count >= 3:
ans.append([left, left + count - 1])
# 更新下一个字符串的左边边界
left += count
return ans

笔者简介
博哥,真名:王一博,毕业十多年,《算法秘籍》作者,专注于数据结构和算法的讲解,在全球30多个算法网站中累计做题2000多道,在公众号中写算法题解800多题,对算法题有自己独特的解题思路和解题技巧,喜欢的可以给个关注,也可以下载我整理的1000多页的PDF算法文档。
文章通过网友讨论和一个简单的LeetCode算法题目(830题)探讨了程序员妻子为何被形容为漂亮,指出聪明和长时间专注工作可能是原因。解题过程中展示了Java、C++、C和Python等编程语言处理字符串连续字符的方法。

被折叠的 条评论
为什么被折叠?



