<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

     1 * 難度:初級
     2 * 問題:從輸入文件calfflac.in中讀取文本,找到最長的回文串(翻轉之后和它自己相等的字符串),只考慮字母,不區分大小寫
     3 *       輸出最長回文串的長度,并且輸出它在原文中的對應的串。如果多個回文串長度相等,輸出第一個。
     4 * 注:該題目來自:http://ace.delos.com/usacogate,有興趣的朋友可以去上面注冊,很好的練習平臺。
     5*/
     6import java.util.*;
     7import java.io.*;
     8class calfflac
     9{
    10  public static void main (String [] args) throws IOException {
    11    // Use BufferedReader rather than RandomAccessFile; it's much faster
    12     BufferedReader f = new BufferedReader(new FileReader("calfflac.in"));
    13                                                  // input file name goes above
    14        PrintWriter out = new PrintWriter(new BufferedWriter(new FileWriter("calfflac.out")));
    15    String temp=null;
    16    StringBuilder origin=new StringBuilder(20000);//包含原來的字符串
    17    StringBuilder letters=new StringBuilder(20000);//包含字母
    18    int[] indexes=new int[20000];
    19    while((temp=f.readLine())!=null)
    20    {
    21        origin.append(temp);
    22        origin.append('\n');
    23    }

    24    int len=origin.length();
    25    for(int i=0;i<len;i++)
    26    {
    27        char c=(origin.charAt(i));
    28        if(c>='a'&&c<='z'||c>='A'&&c<='Z')//只要字母
    29        {
    30            letters.append(origin.charAt(i));
    31            indexes[letters.length()-1]=i;
    32        }

    33    }

    34    int maxLength=1;//回文串的長度
    35    int maxIndex=0;//回文串的中間字母的索引
    36    len=letters.length();
    37    for(int i=0;i<len;i++)//挨個試
    38    {
    39        int length=maxLength+1;//找下一個更長的,因為題目要求,如果是同樣長度的,只輸出最前面的那個。
    40        boolean isChanged=false;//回文串的長度可以是奇數個,也可以是偶數個,這個用于切換
    41        for(;i-(length-1)/2>=0&&i+length/2<len;)
    42        {
    43            //通過當前的i(回文串的中間),以及長度,找到待測定的一段字符串并測試
    44            if(ispal(letters,i-(length-1)/2,i+length/2))
    45            {
    46                maxLength=length;
    47                maxIndex=i;
    48                length+=2;
    49            }

    50            else if(!isChanged)//切換
    51            {
    52                isChanged=true;
    53                length++;//奇數個和偶數個切換
    54            }

    55            else
    56                break;
    57        }

    58    }

    59    //后面的代碼,將找出回文串在原字符串中的樣子。
    60    int start=indexes[maxIndex-(maxLength-1)/2];
    61    int end=indexes[maxIndex+(maxLength)/2];
    62    String result=origin.substring(start,end+1);
    63    out.println(maxLength);
    64    out.println(result);
    65    out.flush();
    66    out.close();
    67    System.exit(0);
    68  }

    69  //判斷s中i到j(都包含在內)之間的字符串是否回文。
    70  static boolean ispal(StringBuilder s,int i,int j)
    71  {
    72      char c1='0',c2='0';
    73      for(;i<j;i++,j--)
    74      {
    75        c1=s.charAt(i);
    76        c2=s.charAt(j);
    77        if(c1!=c2&&(c1-c2)%32!=0)    
    78        return false;
    79      }

    80      return true;
    81  }

    82}

    83
    posted on 2009-07-25 15:41 lanxiazhi 閱讀(1889) 評論(4)  編輯  收藏 所屬分類: 算法
    Comments
    • # re: 文本中找最長的回文字符串
      99讀書人
      Posted @ 2009-07-25 16:16
      學習了!  回復  更多評論   
    • # re: 文本中找最長的回文字符串
      john locke
      Posted @ 2009-07-25 16:50
      沒看懂,要實現什么效果。
      寫個輸入和輸出來看看  回復  更多評論   
    • # re: 文本中找最長的回文字符串
      sunnycare
      Posted @ 2009-07-25 19:02
      描述下算法,寫個偽代碼就可以了。
        回復  更多評論   
    • # re: 文本中找最長的回文字符串
      lanxiazhi
      Posted @ 2009-07-25 19:05
      樓上的朋友,我這是從http://ace.delos.com/usacoprob2?a=ZeOY7JdiFfN&S=calfflac這里貼過來的題目,上面有詳細說明,示例輸入輸出。上面的解答是我自己提供的,因為我覺得java的代碼比c/c++的容易一些(java讓你更專注于算法,而不用考慮很多語言特性,當然速度會慢一些,不過在這種情況下不明顯)。這是一個編程練習平臺,任何人都可以注冊使用,很方便的。  回復  更多評論   

    只有注冊用戶登錄后才能發表評論。


    網站導航:
     
     
    主站蜘蛛池模板: 亚洲色欲色欲www在线播放| 亚洲福利在线视频| 国产亚洲精品成人AA片| 99热在线免费观看| 久久久久亚洲精品无码系列| 一区二区免费在线观看| mm1313亚洲国产精品美女| 国产亚洲精品2021自在线| 浮力影院第一页小视频国产在线观看免费 | a级在线免费观看| 久久青青草原亚洲av无码| 免费A级毛片无码专区| 久久久亚洲精品无码| 中国国产高清免费av片| 久久亚洲精品中文字幕三区| 免费看无码特级毛片| 成**人免费一级毛片| 亚洲日韩一页精品发布| 免费成人在线电影| 亚洲综合自拍成人| 蜜桃视频在线观看免费网址入口| 国产成人精品日本亚洲专区6| 成年人网站在线免费观看| 黄色毛片免费网站| 99久久99久久精品免费看蜜桃| 亚洲伊人久久大香线蕉| 成年女人毛片免费观看97| 春暖花开亚洲性无区一区二区| 麻花传媒剧在线mv免费观看| 亚洲人成免费网站| 日本免费的一级v一片| 久久av免费天堂小草播放| 免费国产人做人视频在线观看| 一级做受视频免费是看美女| 久久亚洲综合色一区二区三区| 国产成人精品免费视频网页大全| 亚洲hairy多毛pics大全| 在线亚洲精品自拍| 精品国产免费人成电影在线观看 | 成a人片亚洲日本久久| 国产精品久久久亚洲|