首页 > 试题广场 >

算法基础-字符移位

[编程题]算法基础-字符移位
  • 热度指数:36963 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解
小Q最近遇到了一个难题:把一个字符串的大写字母放到字符串的后面,各个字符的相对位置不变,且不能申请额外的空间。
你能帮帮小Q吗?



输入描述:

输入数据有多组,每组包含一个字符串s,且保证:1<=s.length<=1000.



输出描述:

对于每组数据,输出移位后的字符串。

示例1

输入

AkleBiCeilD

输出

kleieilABCD
def switch(s):
    i = 0
    cnt = len(s)
    while i < len(s):
        if s[i] >= 'A' and s[i] <= 'Z':
            s = s[:i] + s[i+1:] + s[i]
        else:
            i += 1
        cnt -= 1
        if cnt == 0: break
    return s

while True:
    try:
        s = input().strip()
        print(switch(s))
    except:
        break
发表于 2020-08-23 12:34:32 回复(0)
我觉得空格也是字符串的一部分吧,不去掉空格也有合理的地方吧。
while True:
    try:
        line = input().strip()#因为输入后面有空格,但是看不出来,不加这个结果有2行
        i = 0
        j = 0
        while i < len(line):
            if line[j].isupper():
                line = line[0:j] + line[j+1:] + line[j]
            else:
                j +=1
            i += 1
        print(line)
    except:
        break

编辑于 2020-05-07 16:53:57 回复(0)
while True:
    try:
        s=input().strip()
        s=s+'\\'
        for a in s:
            if a.islower():
                s=s+a
    
        for b in s:
            if b.isupper():
                s=s+b
        print(s[s.rfind('\\')+1:])
    except:
        break


发表于 2020-02-21 16:17:54 回复(0)
def str_remove(s):
    s = [i for i in s]
    return "".join([s[i] for i in range(len(s)) if s[i].islower()]) + "".join(
        [s[i] for i in range(len(s)) if s[i].isupper()])

# 不知道有没有违背规则,大小写分开输出
import sys
for l in sys.stdin:
    print(str_remove(l))

发表于 2019-03-31 20:37:04 回复(0)

这个题目输入有点问题,要用try去处理一下

try:
    s = input().strip()
    while(s):
        lower = []
        upper = []
        for si in s:
            if si == si.lower():
                lower.append(si)
            else:
                upper.append(si)
        print(''.join(lower+upper))
        s = input().strip()
except:
    pass
发表于 2019-03-13 17:34:59 回复(0)
s=input()
for each in s:
    if each.isupper():
        s=s.replace(each,'',1)
        s=s+each
print(s)
我这个有没有大佬回答一下什么问题?
发表于 2019-01-03 22:20:21 回复(0)

s = list(input())
l = len(s)
i = 0
big = 0
while i + big < l:
    if s[i].isupper():
        big = big + 1
        tc = s[i]
        for j in range(l - i - 1):
            s[i + j] = s[i + j + 1]
        s[l - 1] = tc
        i = i
    else:
        i = i + 1
ss = ''+''.join(s) print(ss)
为什么输出小写大写有两行?

你的输出为:
hxzyxssrnndryagibckmhfxdvgiwnlxmttskhmneoojqsraaqbyyejrdfycidqbycptdzzaoqybyhrdwcwpavnbjriwxrzeqzkucabvyxfqttaqfncdroznbvabvuvlraarvtyxrsqxdwrmermrsmbmyfdrhuwxaavatlmvygxcabjyfauwodldgrtcodqsudpczaasdkviturmljefisattfxenyvzlisgeogigbfxybwuqyvjfqithdpvyqehobqpdhtjictxkfobqycjilrnqzmorkawcrceegppjbngtolyxndfwxisjyjchidpgforiumbwogbdlsszthnbqegmexfdsgtmlyugefsqmgoxkkhfvrooyxjngksboposzeukye KLAGLLPTFUSKQBHQQOEYJRJHIDXFQFIPNKIBHXDBKAZBLVJAHSJZSQNVKIYZRPFFZNRVKVFCGTQARGBAKWMOCQRQQQTAVJOTYJVGYSWKYNAGBJLNYVFAGKLHXNZETGMZDZBBRJYIWKGCUOCVEDLKZKFJVRLOGUJZIFSJQGRTYMLKQNMCQIRZFQWQTVENUPKQCUQNNTBNPUQJODUJWCZDEYJMHCZQSRIVIUBKHPWUKRFYWXEXDAFFEIHEPDPKEGUZDIDBGKBFHEEATAHEIIIGBWGHQRZQQYFWUZIRPQBHNBFRUYCSGJCOM***GVWVMTYGAQFPFOFAJZNKDTFIKTXYLBOLIAHAQHBUYBHDQGZJASHOEPLVYNWONTVYHDOBNDBVHYVODJQJLYSTPJFKQHPLXYTYCW
发表于 2018-03-03 11:53:37 回复(1)
a = raw_input()
b = []
c = []
for i in xrange(len(a)):
    if 64<ord(a[i])<91:
        b.append(a[i])
    else:
        c.append(a[i])
print ''.join(c)+''.join(b)
我输出的结果为什么总是两行
发表于 2017-09-13 21:43:38 回复(0)
遍历两次一次输出小写一次输出大写即可。
我的理解里,一般说不使用额外空间,但是如果是常数空间是可以的,即使是指针也要空间嘛
当然C++中用“不使用额外空间和位操作的a和b交换方法”也应该是更吼的。
try:
    while True:
        s=input()
        for i in s:
            if i>='a':
                print(i, end='')
        for i in s:
            if i<'a':
                print(i, end='')
except:
    pass

发表于 2017-08-23 19:41:59 回复(0)
#短小精悍
def fun(l):
    l = list(l)
    i = 0
    count = 0
    while count < len(l):
        if l[i].isupper():
            l.append(l.pop(i))
        else:
            i += 1
        count += 1
    return reduce(lambda x,y: x+y,l)

发表于 2017-08-05 23:29:04 回复(3)
有谁能告诉我,这为什么错。
本地测试是没有问题的,但在这里提交是说有错,难道就是因为额外空间?我不懂这个

t = raw_input()
for i in t:
    if 65<=ord(i)<=90:
        index = t.index(i)
        t = t[:index]+t[index+1:]+t[index]
print t

编辑于 2017-04-01 23:44:23 回复(0)
try:
	while True:
		s = raw_input().strip()
		if s == '':
			break
		for x in s:
			if x.isupper():
				s = s + x
				s = s[0:s.index(x)] + s[s.index(x) + 1:]
		print s

except Exception, e:
	pass

编辑于 2017-03-21 18:27:17 回复(1)

问题信息

难度:
13条回答 43819浏览

热门推荐

通过挑战的用户