Reputation: 21
I am trying to understand why I would receive a different output when I use the len function in the line of code, rather than the variables I defined at the beginning of the for loop.
if len(longest_temp) > len(longest):
longest = longest_temp
vs
if longest_length > longest_check:
longest = longest_temp
s = 'uwgwsamtptsouvz'
longest_temp = ''
longest = ''
letter_values = {'': 0,'a': 1, 'b': 2, 'c': 3, 'd': 4, 'e': 5, 'f': 6, 'g': 7, 'h': 8, 'i': 9, 'j': 10, "k": 11, 'l': 12, 'm': 13, 'n': 14,'o': 15,'p': 16,'q': 17,'r': 18,'s': 19,'t': 20,'u': 21,'v': 22,'w': 23,'x': 24,'y': 25,'z': 26}
for letter in s:
longest_length = len(longest_temp)-1
longest_check = len(longest)-1
if longest_length == -1:
longest_temp = longest_temp + letter
elif letter_values[letter] >= letter_values[longest_temp[(longest_length)]]:
longest_temp = longest_temp + letter
elif letter_values[letter] < letter_values[longest_temp[(longest_length)]]:
if longest_length > longest_check:
longest = longest_temp
longest_temp = letter
else:
longest_temp = letter
if len(longest_temp) > len(longest):
longest = longest_temp
print('longest substring in alphabetical order is:', longest)
Upvotes: 2
Views: 53
Reputation: 2277
if you do
print(longest_length, longest_check)
print(longest_temp, longest)
you get a result of:
-1 -1
u
0 -1
uw
1 -1
g uw
0 1
gw uw
1 1
s uw
0 1
a uw
0 1
am uw
1 1
amt uw
2 1
p amt
0 2
pt amt
1 2
s amt
0 2
o amt
0 2
ou amt
1 2
ouv amt
2 2
ouvz amt
Then you can see it ends the loop and doesn't update the value of longest_check
and longest_length
.
So, just put the value setting code to the last:
s = 'uwgwsamtptsouvz'
longest_temp = ''
longest = ''
letter_values = {'': 0,'a': 1, 'b': 2, 'c': 3, 'd': 4, 'e': 5, 'f': 6, 'g': 7, 'h': 8, 'i': 9, 'j': 10, "k": 11, 'l': 12, 'm': 13, 'n': 14,'o': 15,'p': 16,'q': 17,'r': 18,'s': 19,'t': 20,'u': 21,'v': 22,'w': 23,'x': 24,'y': 25,'z': 26}
longest_length = len(longest_temp)-1
longest_check = len(longest)-1
for letter in s:
if longest_length == -1:
longest_temp = longest_temp + letter
elif letter_values[letter] >= letter_values[longest_temp[(longest_length)]]:
longest_temp = longest_temp + letter
elif letter_values[letter] < letter_values[longest_temp[(longest_length)]]:
if longest_length > longest_check:
longest = longest_temp
longest_temp = letter
else:
longest_temp = letter
longest_length = len(longest_temp)-1
longest_check = len(longest)-1
if longest_length > longest_check:
longest = longest_temp
print('longest substring in alphabetical order is:', longest)
Now it works!
Upvotes: 1