Python技术迷

升级导致线上流量异常事故,老板强制要求归还4万年终奖。。。

哎,说起来年前的那阵风,我们可真是尝尽了职场的酸甜苦辣。年终奖的事,原本以为早就定下来了,结果呢?感觉公司根本就是不想给,找各种锅最后还是只能压到这么多

直到年后,终于找到一口好锅,来了个大转弯——竟然说要追回年终奖年终奖!还说如果不还年终奖,就可以“免费”开除,而且时间限定在3个月内。。。

Image

真是小刀划屁股,开眼了😂

不少网友也感到震惊,没想到竟然还有这种操作……

Image

也有人对此感到很不合理,就算是事故引起损失也不能这样。

Image

专属福利 
👉点击领取:最全Python资料合集

还有网友出谋划策,不用退,然后喜提n+1,美滋滋啊😊

Image

这事儿听起来像是闹剧,但深挖下去其实挺让人反思的。咱们这些打工人,不就图个踏实工作,年底能拿个红包回家嘛。这不仅仅是钱的问题,更关乎于一个“认可”二字。

大家都在这条船上,无论是老板还是员工,彼此都需要一点理解和尊重。年终奖的事,或许就是个契机,让我们更明白职场不只是冷冰冰的数字和合同,还有温度、有人情味。

说到底,职场就像一部大戏,我们都是其中的角色。年终奖这出戏,虽然有点曲折,但也让人学到不少东西。希望未来,咱们都能在这场大戏中找到属于自己的位置,不仅赚钱,更赚得人心和尊重。

下面是今天的算法题

无重复字符的最长子串

算法题目

寻找给定字符串中无重复字符的最长子串长度

引言

在字符串处理的众多问题中,寻找无重复字符的最长子串是一个既具挑战性又极具实用价值的问题。它不仅涉及到对字符串的遍历和分析,还需要高效地识别和处理重复的字符。本文将通过C语言、Java和Python三种不同的编程语言来详细探讨解决这一问题的方法,并通过实例代码演示每种方法的具体实现。

算法思路

解决这个问题的关键是使用滑动窗口技术,窗口内是不含重复字符的子串。具体步骤如下:

  1. 初始化两个指针,表示当前考察的子串的开始和结束位置,以及一个用于存储结果的变量。

  2. 扩展窗口:移动结束指针来扩展窗口,直到遇到重复字符为止。

  3. 缩小窗口:当遇到重复字符时,移动开始指针来缩小窗口,直到移除重复的字符为止。

  4. 更新结果:在每次窗口改变时更新最长子串的长度。

  5. 重复步骤2-4,直到结束指针到达字符串的末尾。

代码实现

C语言实现

#include <string.h>
int lengthOfLongestSubstring(char * s) { int n = strlen(s), ans = 0; int index[128] = {0}; // 存储字符上一次出现的位置 for (int j = 0, i = 0; j < n; j++) { i = index[s[j]] > i ? index[s[j]] : i; ans = ans > (j - i + 1) ? ans : (j - i + 1); index[s[j]] = j + 1; } return ans;}

Java实现

import java.util.HashMap;
public class Solution { public int lengthOfLongestSubstring(String s) { int n = s.length(), ans = 0; HashMap<Character, Integer> map = new HashMap<>(); // 存储字符和对应的索引 for (int end = 0, start = 0; end < n; end++) { char alpha = s.charAt(end); if (map.containsKey(alpha)) { start = Math.max(map.get(alpha), start); } ans = Math.max(ans, end - start + 1); map.put(s.charAt(end), end + 1); } return ans; }}

Python实现

def length_of_longest_substring(s):    charIndexMap = {}    start = maxLength = 0    for i, char in enumerate(s):        if char in charIndexMap and charIndexMap[char] >= start:            start = charIndexMap[char] + 1        maxLength = max(maxLength, i - start + 1)        charIndexMap[char] = i    return maxLength

算法解析

使用滑动窗口技术解决无重复字符的最长子串问题的核心在于动态调整子串的起始和结束位置。通过维护一个字符到索引位置的映射,我们能够快速判断字符是否在当前考察的子串中重复,并据此调整子串的界限。这种方法在时间复杂度上达到了O(n),其中n是字符串的长度,因为每个字符只被访问一次。

示例和测试

给定字符串"abcabcbb",无重复字符的最长子串是"abc",长度为3。

Python测试代码

s = "abcabcbb"print(length_of_longest_substring(s))

总结

无重复字符的最长子串问题是一个经典的字符串处理问题,通过滑动窗口技术,我们可以有效地解决它。本文的多语言实现展示了如何在不同的编程环境中应用这一技术。掌握这种方法不仅对解决当前问题有帮助,还能够为处理其他涉及子串处理的问题提供思路和方法。

Image
 1
Image
热门推荐
Image