栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

【笔记】Java实现最大连续递增有序子串

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【笔记】Java实现最大连续递增有序子串

编写一个程序,提示用户输入一个字符串,然后显示最大连续递增的有序子串。分析你的程序的时间复杂度。下面是一个运行示例:

思路:在每一刻都需要知道2个值:当前子串和当前最大子串,主循环是比较每一次移动后当前子串和当前最大子串的长度,根据情况的不同分类讨论:

设输入字符串为str, i, j 分别指向当前最大子串的首元素和尾元素,p, q 分别指向当前子串的首元素和尾元素,len = q - p + 1, 表示当前子串的长度,Lmax = j - i + 1,表示当前最大子串的长度,则有:

if(len > Lmax):

        更新最大子串

else

        if(q+1不是整个字符串最后一位 && str[q+1] >= str[q])

                q后移一位,当前子串长度+1;

        else if(q+1不是整个字符串最后一位 && str[q+1] < str[q])

                当前子串没机会成为最大子串了,于是从q+1位重新开始;

        else

                q是str最后一位,结束循环;

用图表示:

代码如下:

import java.util.Scanner;


public class E23_1 {
    public static void main(String[] args) {
        System.out.println("Enter a string:");
        Scanner sc = new Scanner(System.in);
        String str = sc.nextLine();

        //调用函数查找最长子串
        findMaxSubString(str);

    }

    public static void findMaxSubString(String str){
        int i, j, p, q, Lmax, len;
        i = j = 0;
        p = q = 0;
        while (p < str.length() && q < str.length()){
            Lmax = j - i + 1;
            len = q - p + 1;

           //当前字串长与当前最大字串长比较
            if (len <= Lmax){
                //若不长于最大字串,查看串尾q是否可后移
                if ((q+1)= str.charAt(q)))
                    //可后移且子串可延长,则q后移,当前字串长度+1
                    q += 1;
                else if ((q+1) 

时间复杂度:由于只遍历了一遍字符串,所以T(n) = O(n) 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/736573.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号