julyedu
V2EX  ›  推广

[面试题分析] 输入一个字符串返回满足以下条件的字符串 找出与字符串的第一个字母相同的字母,把它们替换成 '*',除了第一个字母本身以外 例如: 输入'babble', 返回 'ba**le'

By julyedu at 2020 年 5 月 14 日 · 3844 次点击

有兴趣的兄弟们可以谈论下,晚上我来公布答案哈

第 1 条附言  ·  2020 年 5 月 15 日
我来公布下答案哈:

解析:

s=input('input:')

for i in range(1,len(s)):
print(i)
if s[0]==s[i]:
s=s[:i]+'*'+s[i+1:]
print(s)
41 条回复  •  2020-05-15 11:13:53 +08:00
ytll21
   1
ytll21  
   2020 年 5 月 14 日
好难,加个板凳
kuanng
   2
kuanng  
   2020 年 5 月 14 日
是我想的太简单了吗
cherbim
   3
cherbim  
   2020 年 5 月 14 日
楼上+1,你是不是没说清楚,
jmc891205
   4
jmc891205  
   2020 年 5 月 14 日
扫一遍不就有结果了?
24bit
   5
24bit  
   2020 年 5 月 14 日
+1
Oceanhime
   6
Oceanhime  
   2020 年 5 月 14 日
+1, 兴致勃勃地进来, 一脸懵逼的出去... 这个是有什么特殊算法吗
GrayXu
   7
GrayXu  
   2020 年 5 月 14 日   ❤️ 2
太难了,只能 O(n)实现
sayitagain
   8
sayitagain  
   2020 年 5 月 14 日
+1,难道是限定代码不准超过几个英文字母?[手动狗头]
klesh
   9
klesh  
   2020 年 5 月 14 日 via Android
考点是位操作?
chanchancl
   10
chanchancl  
   2020 年 5 月 14 日
???
老实人来了
Python.
str = str[0] + str.replace(str[0], '*')[1:]
kera0a
   11
kera0a  
   2020 年 5 月 14 日 via iPhone
小学生编程大赛第一题?
cherbim
   12
cherbim  
   2020 年 5 月 14 日
大兄弟,快出来解释一下,这到底要考啥????
强迫症患者表示伤不起
Curtion
   13
Curtion  
   2020 年 5 月 14 日
? 有什么特殊要求吗
IGJacklove
   14
IGJacklove  
   2020 年 5 月 14 日
哈哈,你们吓到楼主了
xxxy
   15
xxxy  
   2020 年 5 月 14 日
老师说,要看到字符串,就想到递归
charlieputon
   16
charlieputon  
   2020 年 5 月 14 日 via iPhone
你们觉得帖子奇怪的,不看 lz 历史记录的吗?捕鱼达人资深玩家了,还被 Livid 处理过...你们还回复的一头是劲=。=lll
daozhihun
   17
daozhihun  
   2020 年 5 月 14 日
没明白,除了 o(N)的扫描一次还有什么别的办法吗?晚上来看看答案
noble4cc
   18
noble4cc  
   2020 年 5 月 14 日
广告都打到这了🤦‍♂️
namelosw
   19
namelosw  
   2020 年 5 月 14 日
感觉头像和发帖都很可疑……
Vegetable
   20
Vegetable  
   2020 年 5 月 14 日
In [2]: def r(s):
...: return s[0]+s[1:].replace(s[0],'*')
...:

In [3]: a = 'babble'

In [4]: r(a)
Out[4]: 'ba**le'
Vegetable
   21
Vegetable  
   2020 年 5 月 14 日
哪个公司出这种面试题?小学生编程大赛?
Hstar
   22
Hstar  
   2020 年 5 月 14 日   ❤️ 2
拭目以待一个 O(logN)的算法
xiaolinjia
   23
xiaolinjia  
   2020 年 5 月 14 日
from collections import Counter


def f1(c: str):
....a = Counter(c)
....for member in c:
........if a.get(member) != 1:
............b = c[::-1]
............b = b.replace(member, '*', a.get(member) - 1)
....return b[::-1]


if __name__ == '__main__':
....print(f1('babble'))

这样?
est
   24
est  
   2020 年 5 月 14 日
julyedu 是个教育培训机构。
SingeeKing
   25
SingeeKing  
   2020 年 5 月 14 日
在线蹲一个 O(logN) 的算法
aijam
   26
aijam  
   2020 年 5 月 14 日
>>> s = 'babble'
>>> re.sub('(?<!^)' + s[0], '*', s)
'ba**le'
guolaopi
   27
guolaopi  
   2020 年 5 月 14 日
if(str=='babble'){
return 'ba**le'
}
crella
   28
crella  
   2020 年 5 月 14 日 via Android
有意思的是,昨天我在知乎上看到一个贴讲 python 的不为人知的缺点,高赞答案就是与这个楼主同名的 id 发的
newtype0092
   29
newtype0092  
   2020 年 5 月 14 日
@Hstar 印象中好像没有对无序数据集的 logN 算法?
cloudfox
   30
cloudfox  
   2020 年 5 月 14 日
纯正则算法
str = str.replace("(?<=^(.).*)\1", "*")
more1sec
   31
more1sec  
   2020 年 5 月 14 日
lambda x: x[0] + x[1:].replace(x[0], '*')
。。。
dswyzx
   32
dswyzx  
   2020 年 5 月 14 日
if(input=="'babble") return "ba**le"
else return "try again"
O(1)
guyeu
   33
guyeu  
   2020 年 5 月 14 日   ❤️ 1
我有一个绝妙的 O(1)算法,可惜地方太小写不下。
4ier
   34
4ier  
   2020 年 5 月 14 日 via Android
@guyeu 难道是枚举不下
lichdkimba
   35
lichdkimba  
   2020 年 5 月 15 日 via iPhone
捕鱼达人
pompeii
   36
pompeii  
   2020 年 5 月 15 日
@livid 这算不算恶心人的营销
Livid
   37
Livid  
MOD
PRO
   2020 年 5 月 15 日
@pompeii 这种营销方式看起来是挺尴尬的。
julyedu
   38
julyedu  
OP
   2020 年 5 月 15 日
解析:

s=input('input:')

for i in range(1,len(s)):
print(i)
if s[0]==s[i]:
s=s[:i]+'*'+s[i+1:]
print(s)
julyedu
   39
julyedu  
OP
   2020 年 5 月 15 日
给大家公布下答案哈:

解析:

s=input('input:')

for i in range(1,len(s)):
print(i)
if s[0]==s[i]:
s=s[:i]+'*'+s[i+1:]
print(s)

@24bit @4ier @Curtion @GrayXu @Hstar @IGJacklove @Livid @Oceanhime @SingeeKing @Vegetable
julyedu
   40
julyedu  
OP
   2020 年 5 月 15 日
@pompeii 哎,只是发了道面试题
julyedu
   41
julyedu  
OP
   2020 年 5 月 15 日
@Vegetable 这是高手,双手点赞
如果想在 V2EX 获得更好的推广效果,欢迎了解 PRO 会员机制:
https://www.v2ex.com/pro/about

如果你经常使用铜币置顶主题,持有 V2EX Solana Token 会在每日签到时获得额外铜币:
https://www.v2ex.com/solana
© 2026 V2EX · 74ms · 3.9.8.5