首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何删除字符串中的重复字符?

要删除字符串中的重复字符,可以使用Python中的集合(set)数据结构。集合中的元素是唯一的,因此可以通过将字符串转换为集合,然后再将其转换回字符串来删除重复字符。以下是一个示例代码:

代码语言:python
代码运行次数:0
复制
def remove_duplicates(s):
    return ''.join(set(s))

input_str = "hello world"
output_str = remove_duplicates(input_str)
print(output_str)

输出结果将是:

代码语言:txt
复制
helo wrd

这种方法不会保留原始字符串中的字符顺序。如果需要保留字符顺序,可以使用以下代码:

代码语言:python
代码运行次数:0
复制
def remove_duplicates(s):
    seen = set()
    result = []
    for char in s:
        if char not in seen:
            seen.add(char)
            result.append(char)
    return ''.join(result)

input_str = "hello world"
output_str = remove_duplicates(input_str)
print(output_str)

输出结果将是:

代码语言:txt
复制
helo wrd

这种方法保留了原始字符串中的字符顺序。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

  • XTU 程序设计Python实训三

    任务1 字符串拼接 依次输入两个字符串赋值给s1和s2,并将s1中所有英文字母转换为大写后连接到s2后面,并将拼接的结果赋值给s3,输出s3的值。 提示:应用“+”运算和字符串的upper()方法。 任务2 根据字符串的长度确定字符串输出重复次数 输入一个字符串赋值给s4,根据s4的长度来确定将s3重复多少次,重复运算结果赋值给s5,并输出s5的值。例如:输入“A1”, 如果s3的值是123XTU,则输出123XTU123XTU。 提示:求字符串的长度用内置函数len(),重复运算用“*” 任务3 访问字符串以及子字符串 输入一个长度为2字符串赋值s6,判定s6在s5的第2至第11个字符(包含第11个字符)之间首次出现的位置与出现次数,若s5的长度小于10,则表示从第2个字符到字符串末尾的子串。例如:输入“XT”,若s5的值是123XTU123XTU,则输出“2 2”,第2个到第11字符的子串是23XTU123XT:表示:“XT”在子串“23XTU123XT”中首次出现的起始位置是2,总共出现了2次。 提示:本任务中需要用到字符串的切片运算:[m:n],出现位置与次数分别使用序列类型的共有方法:index()和count() 任务4 字符串的替换 输入一个字符串赋值给s8,将s5中所有的数字符号”2”替换成存储在s8中的字符串,并将替换结果赋值给s9,输出s9的值。例如:输入一个字符串“TO”,s5是123XTU123XTU,则输出替换后的结果为:1TO3XTU1TO3XTU。 提示:本任务中需要用到字符串的方法:replace() 任务5 字符串反转 将任务4中替换结果s9反转,输出s9反转后的值。例如:s9中存储的是:1TO3XTU1TO3XTU,则输出的反转结果是:UTX3OT1UTX3OT1 提示:本任务中需要用到字符串的切片运算:[::-1]

    03

    我赌你工作中必用的vim操作快捷键

    h 或 向左箭头键(←) 光标向左移动一个字符 j 或 向下箭头键(↓) 光标向下移动一个字符 k 或 向上箭头键(↑) 光标向上移动一个字符 l 或 向右箭头键(→) 光标向右移动一个字符 如果你将右手放在键盘上的话,你会发现 hjkl 是排列在一起的,因此可以使用这四个按钮来移动光标。 如果想要进行多次移动的话,例如向下移动 30 行,可以使用 “30j” 或 “30↓” 的组合按键, 亦即加上想要进行的次数(数字)后,按下动作即可! [Ctrl] + [f] 屏幕『向下』移动一页,相当于 [Page Down]按键 (常用) [Ctrl] + [b] 屏幕『向上』移动一页,相当于 [Page Up] 按键 (常用) [Ctrl] + [d] 屏幕『向下』移动半页 [Ctrl] + [u] 屏幕『向上』移动半页

    04

    别用 KMP 了, Rabin-Karp 算法了解下?

    经常有读者留言,请我讲讲那些比较经典的算法,我觉得有这个必要,主要有以下原因: 1、经典算法之所以经典,一定是因为有独特新颖的设计思想,那当然要带大家学习一波。 2、我会尽量从最简单、最基本的算法切入,带你亲手推导出来这些经典算法的设计思想,自然流畅地写出最终解法。一方面消除大多数人对算法的恐惧,另一方面可以避免很多人对算法死记硬背的错误习惯。 我之前用状态机的思路讲解了 KMP 算法,说实话 KMP 算法确实不太好理解。不过今天我来讲一讲字符串匹配的另一种经典算法:Rabin-Karp 算法,这是一个很简单优雅的算法。 本文会由浅入深地讲明白这个算法的核心思路,先从最简单的字符串转数字讲起,然后研究一道力扣题目,到最后你就会发现 Rabin-Karp 算法使用的就是滑动窗口技巧,直接套前文讲的 滑动窗口算法框架 就出来了,根本不用死记硬背。 废话不多说了,直接上干货。 首先,我问你一个很基础的问题,给你输入一个字符串形式的正整数,如何把它转化成数字的形式?很简单,下面这段代码就可以做到: string s = "8264"; int number = ; for (int i = ; i < s.size(); i++) { // 将字符转化成数字 number = * number + (s[i] - '0'); print(number); } // 打印输出: // 8 // 82 // 826 // 8264 可以看到这个算法的核心思路就是不断向最低位(个位)添加数字,同时把前面的数字整体左移一位(乘以 10)。 为什么是乘以 10?因为我们默认探讨的是十进制数。这和我们操作二进制数的时候是一个道理,左移一位就是把二进制数乘以 2,右移一位就是除以 2。 上面这个场景是不断给数字添加最低位,那如果我想删除数字的最高位,怎么做呢?比如说我想把 8264 变成 264,应该如何运算?其实也很简单,让 8264 减去 8000 就得到 264 了。 这个 8000 是怎么来的?是 8 x 10^3 算出来的。8 是最高位的数字,10 是因为我们这里是十进制数,3 是因为 8264 去掉最高位后还剩三位数。 上述内容主要探讨了如何在数字的最低位添加数字以及如何删除数字的最高位,用R表示数字的进制数,用L表示数字的位数,就可以总结出如下公式: /* 在最低位添加一个数字 */ int number = ; // number 的进制 int R = ; // 想在 number 的最低位添加的数字 int appendVal = ; // 运算,在最低位添加一位 number = R * number + appendVal; // 此时 number = 82643 /* 在最高位删除一个数字 */ int number = ; // number 的进制 int R = ; // number 最高位的数字 int removeVal = ; // 此时 number 的位数 int L = ; // 运算,删除最高位数字 number = number - removeVal * R^(L-); // 此时 number = 264 如果你能理解这两个公式,那么 Rabin-Karp 算法就没有任何难度,算法就是这样,再高大上的技巧,都是在最简单最基本的原理之上构建的。不过在讲 Rabin-Karp 算法之前,我们先来看一道简单的力扣题目。 高效寻找重复子序列 看下力扣第 187 题「重复的 DNA 序列」,我简单描述下题目: DNA 序列由四种碱基A, G, C, T组成,现在给你输入一个只包含A, G, C, T四种字符的字符串s代表一个 DNA 序列,请你在s中找出所有重复出现的长度为 10 的子字符串。 比如下面的测试用例: 输入:s = "AAAAACCCCCAAAAACCCCCCAAAAAGGGTTT" 输出:["AAAAACCCCC","CCCCCAAAAA"] 解释:子串 "AAAAACCCCC" 和 "CCCCCAAAAA" 都重复出现了两次。 输入:s = "AAAAAAAAAAAAA" 输出:["AAAAAAAAAA"] 函数签名如下: List<String> findRepeatedDnaSequences(String s); 这道题的拍脑袋解法比较简单粗暴,我直接穷举所有长度为 10 的子串,然后借助哈希集合寻找那些重复的子串就行了,代码如下: // 暴力解法 List<String> findRepeatedDnaSequences(String s) { int n = s.length(); // 记录出现过的子串 HashSet<String> seen = new HashSet(); // 记录那些重复出现多次的子串 // 注

    02
    领券