Not allowed to use "Split(),Reverse(),Join() or regexes" or any other helping inbuilt python function
input something like this:
" my name is scheven "
output like this:
"ym eman si nevehcs"
you need to consider removing the starting,inbetween,ending spaces aswell in the input
I have tried 2 tries, both failed i will share my try to solve this and maby an idea to improve it
First try:
def reverseString(someString):
#lenOfString = len(someString)-1
emptyList = []
for i in range(len(someString)):
emptyList.append(someString[i])
lenOfString = len(emptyList)-1
counter = 0
while counter < lenOfString:
if emptyList[counter] == " ":
counter =1
if emptyList[lenOfString] == " ":
lenOfString-=1
else:
swappedChar = emptyList[counter]
emptyList[counter] = emptyList[lenOfString]
emptyList[lenOfString] = swappedChar
counter =1
lenOfString-=1
str_contactantion = ""
#emptyList = emptyList[::-1]
#count_spaces_after_letter=0
for letter in emptyList:
if letter != " ":
str_contactantion =letter
#str_contactantion =" "
str_contactantion =" "
return str_contactantion
second try:
def reverse(array, i, j):
emptyList = []
if (j == i ):
return ""
for k in range(i,j):
emptyList.append(array[k])
start = 0
end = len(emptyList) -1
if start > end: # ensure i <= j
start, end =end, start
while start < end:
emptyList[start], emptyList[end] = emptyList[end], emptyList[start]
start = 1
end -= 1
strconcat=""
for selement in emptyList:
strconcat =selement
return strconcat
def reverseStr(someStr):
start=0
end=0
help=0
strconcat = ""
empty_list = []
for i in range(len(someStr)):
if(someStr[i] == " "):
continue
else:
start = i
j = start
while someStr[j] != " ":
j =1
end = j
#if(reverse(someStr,start,end) != ""):
empty_list.append(reverse(someStr,start,end))
empty_list.append(" ")
for selement in empty_list:
strconcat = selement
i = end 1
return strconcat
print(reverseStr(" my name is scheven "))
CodePudding user response:
Try this:
string = " my name is scheven "
def reverseString(someString):
result = ''
curr_word = ''
for i in string:
if i == ' ':
if curr_word:
result = f'{result}{curr_word} '
curr_word = ''
else:
curr_word = f'{i}{curr_word}'
if result[-1] == ' ':
result = result[:-1]
return result
print(repr(reverseString(string)))
Output:
'ym eman si nevehcs'
Note: if you're allowed to use list.append method, I'd suggest using a collections.deque as it's more performant than appending to a list. But of course, in the end you'll need to join the list together, and you mentioned that you're not allowed to use str.join, so that certainly poses an issue.
CodePudding user response:
Try this:
def reverseString(someString):
result = ""
word = ""
for i in someString:
if i == " ":
if word:
result = result (result and " ") word
word = ""
else:
word = i word
return result
You can then call it like this:
reverseString(" my name is scheven ")
# Output: 'ym eman si nevehcs'
CodePudding user response:
The following works without managing indices:
def reverseString(someString):
result = crnt = ""
for c in someString:
if c == " ":
if crnt:
if result:
result = " "
result = crnt
crnt = ""
else:
crnt = c crnt
result = crnt
return result
reverseString(" my name is scheven ")
# 'ym eman si nevehcs'
