编写一个程序,提示用户输入一个字符串,然后显示最大连续递增的有序子串。分析你的程序的时间复杂度。
时间: 2024-10-28 15:06:22 浏览: 18
编写一个这样的程序,可以使用动态规划的方法。首先,创建一个长度等于输入字符串长度的数组dp,其中dp[i]表示到位置i为止的最大连续递增序列的长度。遍历输入字符串,对于每个字符,比较它与前一个字符的大小:
1. 如果当前字符大于前一个字符,说明存在一个递增子串,更新dp[i] = dp[i - 1] + 1;
2. 否则,如果当前字符小于或等于前一个字符,则dp[i] = 1,因为最多只有当前位置一个字符组成的递增子串。
最后,遍历整个dp数组,找到最大的dp值即为最大连续递增有序子串的长度。然后从原始字符串中取出对应的子串即可。
时间复杂度分析:
该算法的时间复杂度主要取决于字符串的长度n。我们只遍历了一次字符串,并对每个位置进行了常数次比较和更新操作,因此总时间复杂度是O(n)。
```python
def max_increasing_substring(s):
if not s:
return ""
n = len(s)
dp = [1] * n
max_len = 1
start = 0
for i in range(1, n):
if s[i] > s[i - 1]:
dp[i] = dp[i - 1] + 1
if dp[i] > max_len:
max_len = dp[i]
start = i - max_len + 1
return s[start:start+max_len]
# 示例
input_string = input("请输入一个字符串:")
result = max_increasing_substring(input_string)
print(f"最大连续递增有序子串是:{result}")
```
阅读全文