在字串中找出連續最長的數字串

來源:互聯網
上載者:User

        今天在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 );     }

 

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.