题解 | #在字符串中找出连续最长的数字串#

在字符串中找出连续最长的数字串

http://www.nowcoder.com/practice/2c81f88ecd5a4cc395b5308a99afbbec

两个逻辑清晰明了,没啥难理解的,O(n)复杂度

第一是找到中最常数字的长度,遍历一遍就出来了,打擂台,可作为解题模板

第二就是再遍历一遍获取长度为最大值的子串,并判断子串中是否含有字母,如果含有,则添加进结果中,时间复杂度O(n)

  import java.util.Scanner;

/**
 * @author 
 * 输入一个 int 型的正整数,计算出该 int 型数据在内存中存储时 1 的个数。
 *
 * 数据范围:保证在 32 位整型数字范围内
 */
public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        while (sc.hasNext()) {
            String string = sc.nextLine();
            doSearch(string);
        }
    }
    public static void doSearch(String string){
        int n = 0;//计数变量
        int maxOne = 0;
        // 遍历一遍获取长度最大值,时间复杂度O(n)
        for(int i=0; i < string.length(); i++){
            if(Character.isLetter(string.charAt(i))){
                n = 0;
            }
            if(Character.isDigit(string.charAt(i))){
                n++;
                maxOne = Integer.max(maxOne,n);

            }
        }
        
        // 再遍历一遍获取长度为最大值的子串,并判断子串中是否含有字母,时间复杂度O(n)
        // a123  a12 123 subString(0,2) subString(1,3)
        StringBuilder sb = new StringBuilder(); // 
        String str;
        for(int i=0; i <= string.length() - maxOne; i ++){
            str = string.substring(i, i + maxOne);
            boolean flag = false;
            for (int j = 0; j < maxOne; j++) {
                if (Character.isLetter(str.charAt(j))){// 这里重复判断,可以优化
                    flag = true;
                }
            }
            if(flag == false){
                sb.append(str);
            }
        }
        
        System.out.println(sb+","+ maxOne);
    }
}

全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务