设置 | 登录 | 注册

目前共有7篇帖子。

最長字符串

1楼 2026-3-23 15:28

小藍手裡有一個單詞本,記錄在 words.txt 中,其中每一行包含一個僅有小寫英文字母組成的單詞。

小藍想要找到一個最長的優美字符串。

一個長度為 n 的字符串 s=c1c2…cns=c1​c2​…cn​ 是優美字符串,必須滿足 s 在單詞本中,且滿足以下兩個條件之一:



n=1n=1;
n>1n>1,且存在一個優美字符串 s′, s′ 的長度為 n−1n−1,s′ 的字符調整順序後與 c1c2…cn−1c1​c2​…cn−1​ 一致。

例如,假設 words.txtwords.txt 文件中的單詞如下:bb、bcbc、cbdcbd、dbcadbca,那麼:



s1=bs1​=b,長度 11,是優美字符串;
s2=bcs2​=bc,s′=bs′=b 在單詞本中出現過,且是優美字符串,所以 s2s2​ 是優美字符串;
s3=cbds3​=cbd,s′=bcs′=bc 在單詞本中出現過,且是優美字符串,所以 s3s3​ 是優美字符串;
s4=dbcas4​=dbca,s′=cbds′=cbd 在單詞本中出現過,且是優美字符串,所以 s4s4​ 是優美字符串。

請幫助小藍從單詞本 words.txtwords.txt 中找出長度最大的優美字符串,如果存在多個答案,優先使用字典序最小的那一個作為答案。

輸入格式

使用標準輸入讀取 words.txt 里的字符串。

輸出格式

輸出一行包含一個字符串,表示長度最大的優美字符串(若有多個,輸出字典序最小的那個)。

2楼 2026-3-23 15:35
1讀取文件

2按行存儲

3長度排序

4已知的長度為1的加入判斷集合,結果集合

5將字符串按字母序重新組合,按順序減少一個字符,將減少後的字符組合成的集合查看是否在結果集合,是就將重新排列後的字符串加入集合。排序前的結果加入結果集合

6結果集合中最長,字典序最小的進行輸出

巨大八爪鱼C語言二維字符數組=字符串數組。
回復 @巨大八爪魚:我打算寫python
3楼 2026-3-23 18:42

審題錯誤,現在修改為

1讀取文件 

2按行存儲 

 3長度排序 

 4已知的長度為1的加入判斷集合,結果集合 

 5將字符串減少最後一個字符,將減少後的字符串排序,排序後的查看是否在判斷集合,是就將重新排列後的字符串加入集合。排序前的結果加入結果集合

 6結果集合中最長,字典序最小的進行輸出

看來一般補需要打開文件操作
4楼 2026-3-23 21:00

import os

import sys


# 請在此輸入您的代碼

word=[]

for line in sys.stdin:

    w = line.strip()

    if w:

        word.append(w)#忘記加w

word.sort(key=lambda x: x,reverse=True)#按字典序反排

word.sort(key=lambda x:len(x))#冒號後是兩個排序依據,先排號不用再排

#不行題目要求字典序最小

#讀取,按長度排序

#排序,存儲排序後的單詞

goodword_sort = set()#list改set(),加快查找

result_word=[]

#結果

for w in word:

  if len(w)==1:

    goodword_sort.add(w)

    result_word.append(w)


  #不為1,裁剪排序

  else:

    good_w=w[:-1]

    good_sort_w=''.join(sorted(good_w))

    if good_sort_w in goodword_sort:#判斷是,添加

      goodword_sort.add(''.join(sorted(w)))

      result_word.append(w)#加的時候加輪到處理的字符串


print(result_word[-1])


内容转换:

回复帖子
内容:
用户名: 您目前是匿名发表。
验证码:
看不清?换一张