2013-10-26 4 views
-1

Первое программирование времени когда-либо ... Я пытаюсь сделать это упражнение ..:первый раз программирования упражнений

Напишите программу, которая печатает самую длинную подстроку, в которой буквы происходят в алфавитном порядке. Например, если S = ​​'azcbobobegghakl', то ваша программа должна напечатать

Серия подстроки в алфавитном порядке является: beggh

Я here..before начинает волноваться:

s = 'abcdezcbobobegghakl' 
n = len(s) 
x = 0 


x += 1 
lengh = s[x-1] 
if s[x] >= s[x-1]: 
    lengh = lengh + s[x] 


if s[x+1] < s[x]: 
    n = len(lengh) 
if x > n: 
    break 

print('Longest substring in alphabetical order is: ' + str(lengh)) 

I знаю, что этот код плохой. Я пытаюсь найти подстроку в алфавитном порядке и каким-то образом сохранить самый длинный! Я знаю, что это нормально, потому что я никогда не программировал раньше, но я чувствую себя очень расстроенным ... любая хорошая идея/помощь?

+0

Какой язык программирования вы используете? Я не могу это признать. – Lorenz

+0

На каких языках вы программируете? И вы узнали о петлях? Они помогут здесь –

+0

Это Python. – s3lph

ответ

0

Сначала попробуйте разложить проблему на небольшие проблемы (не оптимизируйте! Пока ваша проблема не будет решена), если вы узнали о функциях, это хороший способ разложить поток выполнения на читаемые и понятные фрагменты.

Пример для начала было бы:

def get_sequence_size(my_string, start): 
    # Your code here 
    return size_of_sequence 

current_position = 0 
while current_position < len(my_string): 
    # Your code here using get_sequence_size() function 
0
def find_longest_substr(my_str): 

    # string var to hold the result 
    res = "" 

    # candidate for the longest sub-string 
    candidate = "" 

    # for each char in string 
    for char in my_str: 

     # if candidate is empty, just add the first char to it 
     if not candidate: 
      candidate += char 

     # if last char in candidate is "lower" than equal to current char, add char to candidate 
     elif candidate[-1] <= char: 
      candidate += char 

     # if candidate is longer than result, we found new longest sub-string 
     elif len(candidate) > len(res): 
      res= candidate 
      candidate = char 

     # reset candidate and add current char to it 
     else: 
      candidate = char 

    # last candidate is the longest, update result 
    if len(candidate) > len(res): 
     res= candidate 

    return res 


def main(): 
    str1 = "azcbobobegghaklbeggh" 
    longest = find_longest_substr(str1) 
    print longest 


if __name__ == "__main__": 
    main() 
+0

Аккуратный код. Однако он не возвращает правильный результат, когда самая длинная подстрока находится в начале или в конце строки. Кроме того, нарезка с '[-1:]' немного избыточна, и вы можете просто использовать '[-1]'. –

+0

правильный. хорошее наблюдение. не думали об этом всю дорогу. Просто хотел начать прыжок для nico. Спасибо за таких парней, как вы, мы поддерживаем это сообщество надежным. – idanshmu

0

Следующий код решает эту проблему с помощью reduce метода:

solution = '' 

def check(substr, char): 
    global solution 
    last_char = substr[-1] 
    substr = (substr + char) if char >= last_char else char 
    if len(substr) > len(solution): 
     solution = substr 
    return substr 

def get_largest(s): 
    global solution 
    solution = '' 
    reduce(check, list(s)) 
    return solution 
0

Это все если у вас есть строка (ы) и нужно найти самую длинную подстроку в алфавитном порядке.

Вариант А

test = s[0]  # seed with first letter in string s 
best = ''  # empty var for keeping track of longest sequence 

for n in range(1, len(s)): # have s[0] so compare to s[1] 
    if len(test) > len(best): 
     best = test 
    if s[n] >= s[n-1]: 
     test = test + s[n] # add s[1] to s[0] if greater or equal 
    else:      # if not, do one of these options 
     test = s[n] 

print "Longest substring in alphabetical order is:", best 

Вариант B

maxSub, currentSub, previousChar = '', '', '' 
for char in s: 
    if char >= previousChar: 
     currentSub = currentSub + char 
     if len(currentSub) > len(maxSub): 
      maxSub = currentSub 
    else: currentSub = char 
    previousChar = char 
print maxSub 

Вариант C

matches = [] 
current = [s[0]] 
for index, character in enumerate(s[1:]): 
    if character >= s[index]: current.append(character) 
    else: 
     matches.append(current) 
     current = [character] 
print "".join(max(matches, key=len)) 

Вариант D

def longest_ascending(s): 
    matches = [] 
    current = [s[0]] 
    for index, character in enumerate(s[1:]): 
     if character >= s[index]: 
      current.append(character) 
     else: 
      matches.append(current) 
      current = [character] 
    matches.append(current) 
    return "".join(max(matches, key=len)) 
print(longest_ascending(s)) 
+0

Не работает. Проверьте, что 'abcd' – 1392023093user

0
def longest(s): 
    buff = '' 
    longest = '' 

    s += chr(255) 
    for i in range(len(s)-1): 
     buff += s[i] 
     if not s[i] < s[i+1]: 
      if len(buff) > len(longest): 
       longest = buff 
      buff = '' 
    if len(buff) > len(longest): 
     longest = buff 

    return longest 
Смежные вопросы