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

        今天在csdn上无意看到这个题目,突然很有兴趣。因为我觉得这个看似简单的问题似乎也没那和简单。看到别人写个的几个,可是我感觉都不太合理,于是决定自己动手写。所谓连续的数字串应该做何理解,我觉得像12345,54321这样的都是算的,又如123567,这样的整体不是,但可以分为两个:123和567。765321也类似。当最长连续数字串有多个时取最后一个。实现如下:

public static int Continumax(String intputStr, StringBuffer outputStr) {
        char [] charArray = intputStr.toCharArray();
        StringBuilder sb = new StringBuilder();
        for ( int i = 0 ; i < charArray.length; i++) {
            if (Character.isDigit(charArray[i])) {
                sb.append(charArray[i]);
            } else {
                sb.append( "," );
            }
        }
        String[] digitArray = sb.toString().replaceAll( "(,)+" , "," ).split( "," ); //得到数字数组
        if (digitArray.length <= 1 ) {
            System.out.println( "没有数字串!" );
            return 0 ;
        }
        List<String> digitList = new ArrayList<String>(Arrays.asList(digitArray)); //转化为list方便操作
        List<String> positiveDigitList = fetchContinueDigitByPositiveSort(digitList, true ); //得到正向连续的数字比如1234,345
        List<String> backDigitList = fetchContinueDigitByPositiveSort(digitList, false ); //得到反向连续的数字比如4321,765
        List<String> lastList = new ArrayList<String>();
        lastList.addAll(positiveDigitList);
        lastList.addAll(backDigitList);
        int maxLength = 0 ;
        String maxValue = "" ;
        List<String> endStrList = new ArrayList<String>();
        for (String s : lastList) {         //找出最长并且是最后一个的值和长度
            if (s.length() > maxLength) {
                maxLength = s.length();
            }
        }
        for (String s : lastList) {         //找出最长并且是最后一个的值和长度
            if (s.length() == maxLength) {
                endStrList.add(s);
            }
        }
        int startIndex = 0 ;
        for (String s : endStrList) {
            if (intputStr.lastIndexOf(s) >= startIndex) {
                startIndex = intputStr.lastIndexOf(s);
                maxValue = s;
                maxLength = s.length();
            }
        }
        System.out.println( "最大连续数字串为:" + maxValue);
        System.out.println( "其长度为:" + maxLength);
        return maxLength;
    }
 
    private static List<String> fetchContinueDigitByPositiveSort(List<String> digitList, boolean isPositive) {
        List<String> lastDigitList = new ArrayList<String>();
        for (String s : digitList) {
            if (s.equals( "" )) {
                continue ;
            }
            char [] charArray = s.toCharArray();
            int start = Integer.parseInt(String.valueOf(charArray[ 0 ]));
            int begin = Integer.parseInt(String.valueOf(charArray[ 0 ]));
            int startIndex = 0 ;
            if (charArray.length == 1 ) {
                lastDigitList.add(String.valueOf(start));
                return lastDigitList;
            }
            for ( int j = 1 ; j < charArray.length; j++) {
                if (isPositive) {
                    if (begin + 1 == Integer.parseInt(String.valueOf(charArray[j])) && j != charArray.length - 1 ) {
                        begin = begin + 1 ;
                        continue ;
                    }
                } else {
                    if (begin - 1 == Integer.parseInt(String.valueOf(charArray[j])) && j != charArray.length - 1 ) {
                        begin = begin - 1 ;
                        continue ;
                    }
                }
                begin = Integer.parseInt(String.valueOf(charArray[j]));
                if (start == begin) {
                    lastDigitList.add(String.valueOf(start));
                } else if (j == charArray.length - 1 && ((isPositive && Integer.parseInt(String.valueOf(charArray[j])) - 1 == Integer.parseInt(String.valueOf(charArray[j - 1 ])))
                        || (Integer.parseInt(String.valueOf(charArray[j])) + 1 == Integer.parseInt(String.valueOf(charArray[j - 1 ]))))) {
                    lastDigitList.add(String.valueOf(charArray).substring(startIndex, j + 1 ));
                } else {
                    lastDigitList.add(String.valueOf(charArray).substring(startIndex, j));
                    if (j == charArray.length - 1 ) {
                        lastDigitList.add(String.valueOf(charArray[j]));
                    }
                }
                start = begin;
                startIndex = j;
            }
 
        }
        return lastDigitList;
 
    }
 
    public static void main(String[] arg) {
        Continumax( "54321test123457 " , null );
    }

猜你喜欢

转载自blog.csdn.net/tlfu_12344/article/details/8947933