用java编写上述代码
时间: 2024-11-15 09:20:06 浏览: 7
当然,以下是使用Java实现寻找最长递增子串的代码:
```java
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入一个字符串:");
String inputStr = scanner.nextLine();
String result = maxIncreasingSubsequence(inputStr);
System.out.printf("最大连续递增的有序子字符串是:%s%n", result);
}
public static String maxIncreasingSubsequence(String str) {
int n = str.length();
int[] dp = new int[n];
int maxLen = 1;
int endIndex = 0;
for (int i = 1; i < n; i++) {
if (str.charAt(i) >= str.charAt(i - 1)) {
dp[i] = dp[i - 1] + 1;
if (dp[i] > maxLen) {
maxLen = dp[i];
endIndex = i;
}
} else {
dp[i] = 1; // 如果当前字符小于前一个,重置dp为1
}
}
return str.substring(endIndex - maxLen + 1, endIndex + 1);
}
}
```
这段代码首先通过Scanner获取用户的输入字符串,然后调用`maxIncreasingSubsequence`函数计算最长递增子串,最后打印结果。
时间复杂度和之前提到的一样,是线性的O(n),空间复杂度也是O(n),因为需要一个大小为n的数组来存储子串的长度信息。如果需要优化空间,可以考虑使用滚动数组(rolling array)或者其他数据结构来替换整数数组。
阅读全文