Python技术迷

麻了!被欠薪后,他在办公室拉shi。。。

今天看到一个真是让人又笑又愤怒的事,发生在某位00后程序员身上——他在公司被欠薪后,居然直接在办公室“拉shi”了!

没错,听起来很荒谬对吧?但仔细一想,好像也没什么比这种极端的反应更能表达不满了。

Image

这位网友表示自己在公司遭遇了欠薪,直接找老板理论,结果老板居然说没提前告知离职时间,还推脱了很多责任。

于是这位网友非常“生动”地表达了自己的愤怒,直接在办公室拉了个“shi”!虽然这种做法确实让人哭笑不得

Image

对于这位网友的做法,我只想说,虽然挺极端,但也算是一种反抗,至少他没有忍气吞声。

不过,大家还是要理智面对工作中的问题。毕竟,任何事情都可以通过更理性的方式来解决,何必“拉shi”呢?不过,想想老板看到这幕的表情,估计也会惊得不轻吧!😅【备注:文末可领最新资料】。

算法题:不同的循环子字符串

聊一个看似简单,却能卡住不少小伙伴的算法题——不同的循环子字符串。

题目背景

简单来说,这道题给你一个字符串,让你去找出其中所有不重复的循环子字符串。啥叫“循环子字符串”?

这其实就是一种字符串变形的方法,比如给定字符串“abc”,它的循环子字符串就包括“abc”, “bca”, “cab”这样的变换。好,既然定义清楚了,那接下来就是如何高效地找到所有不重复的循环子串。

解决思路

首先,要解决这个问题,我们得知道几个关键点:

  1. 循环子串的理解:你可以把一个字符串的开始和结尾接起来,形成一个“循环”的效果。举个例子,"abc" 和 "bca" 是通过循环产生的,理解了这一点,就能明确怎么去找这些子串。

  2. 不重复的子串:有些算法题中,要求你排除重复的子串。对于这个问题,直接用一个集合(set)就可以轻松搞定。集合天然去重,这样我们就能保证得到的结果是不同的。

那接下来的问题就变得很直接了——如何有效地生成这些循环子串?有没有什么聪明的技巧呢?

一种直观的做法

假设给定一个字符串 s,长度为 n。从 s 中提取出所有的子串是比较容易的,问题就出在如何处理“循环”这件事上。

首先可以考虑将字符串 s 复制一遍,变成一个“超长字符串”,例如对于 "abc",我们可以得到 "abcabc",这样,所有的循环子串都会出现在这个新字符串中。为什么呢?因为你将原本的开始和结尾拼接在一起,相当于把所有的循环变换都包含了。

接下来,我们就可以枚举从这个字符串中取子串,长度仍然是 n。然后利用 Python 的集合去重特性,保存这些子串,最终我们就能得到所有不同的循环子串。

代码实现

来,咱们直接写个简单的代码看看怎么搞定这道题。

def count_unique_rotations(s: str) -> int:
    # 首先生成一个循环字符串
    doubled_s = s + s  # abc + abc -> abcabc

        # 使用集合来存储所有不同的循环子串
    rotations = set()

        # 枚举所有长度为len(s)的子串
    for i in range(len(s)):
        rotation = doubled_s[i:i+len(s)]
        rotations.add(rotation)

        # 返回集合的大小,即不重复的循环子串个数
    return len(rotations)

# 示例
s = "abc"
print(count_unique_rotations(s))  # 输出 3,子串是:abc, bca, cab

代码解析

  1. 生成循环字符串:我们通过 s + s 得到了一个“扩展版”字符串,这样就可以包含所有循环后的字符串变换。

  2. 用集合去重:通过一个 set 来存储子串,避免了重复的情况。这样,我们就能保证得到的是不同的循环子串。

  3. 时间复杂度:遍历字符串,生成每个子串的时间复杂度是 O(n),由于是通过集合去重,所以这一步其实在大部分情况下是常数时间复杂度。整体上来说,时间复杂度大概是 O(n^2),其中 n 是字符串的长度。对小字符串来说,这个时间复杂度完全是可以接受的。

总结

通过这道题,我们能够更好地理解字符串的循环变换以及集合的妙用。虽然题目看起来简单,但通过对细节的处理,可以高效地解决问题。

在解决算法题时,很多时候我们不用想着一开始就用最复杂的技巧,简单而有效的方法往往更能快速解决问题。

最后,我为大家打造了一份deepseek的入门到精通教程,完全免费:https://www.songshuhezi.com/deepseek

也可以看我写的这篇文章《DeepSeek满血复活,直接起飞!》来进行本地搭建。

对编程、职场感兴趣的同学,大家可以联系我微信:golang404,拉你进入“程序员交流群”。
🔥虎哥私藏精品 热门推荐🔥

虎哥作为一名老码农,整理了全网最全《python高级架构师资料合集》。

资料包含了《IDEA视频教程》、《最全python面试题库》、《最全项目实战源码及视频》及《毕业设计系统源码》,总量高达650GB,全部免费领取