隨筆心得

          記我所見,記我所想

          BlogJava 首頁 新隨筆 聯系 聚合 管理
            34 Posts :: 0 Stories :: 16 Comments :: 0 Trackbacks

          C語言實現:
          窮舉法:
          #include <iostream.h>//窮舉法計算最大公共子字符串
          #define M 100
          typedef struct
          {
          ?char str[M];
          ?int length;
          }seqstring;

          int len_link(seqstring p)
          {
          ?int i=0,length=0;
          ?while(p.str[i]!='\0')
          ?{
          ??i++;
          ??length++;
          ?}
          ?return (length);
          }

          void same(seqstring p,seqstring s)
          {
          ?seqstring r;
          ?int i=0,l,m,n=0,k;
          ?while(i<p.length)//用窮舉法求最大公共子字符串
          ?{
          ??int j=0;
          ??while(j<s.length)
          ??{
          ???if(p.str[i]==s.str[j])//以p為基準
          ???{
          ????l=1;
          ????for(m=1;i+m<p.length&&j+m<s.length&&p.str[i+m]==s.str[j+m];m++)//尋找相等的
          ????{
          ?????l++;//記錄相等字符的個數
          ????}
          ????if(l>n)
          ????{
          ????? k=i;//記錄公共字符串的起點位置
          ????? n=l;//記錄公共字符串的個數
          ????}
          ?????j=j+l;
          ???}
          ???else
          ???{
          ????j++;
          ???}
          ?? }
          ??? i++;
          ?}
          ?if(n>0)
          ?{
          ??for(i=0;i<n;i++)
          ??{
          ???r.str[i]=p.str[i+k];
          ???r.length=n;
          ??}
          ?}
          ?else
          ?{
          ??cout<<"無!";
          ?}
          ? for(i=0;i<n;i++)
          ? {
          ??cout<<r.str[i];
          ? }
          ?cout<<endl;
          }

          void main()
          {
          ? seqstring p,s;//結構體
          ? cout<<"請輸入第一個字符串元素:";
          ? cin>>p.str;
          ? cout<<"請輸入第二個字符串元素:";
          ? cin>>s.str;
          ? p.length=len_link(p);
          ? s.length=len_link(s);
          ? cout<<"最大公共子串為:";
          ? same(p,s);
          }

          java語言實現:

          基本思想是從最大字符串開始比較
          先選擇兩個字符串中 較小的一個并以其為基準? 然后由大開始向小進行比較 找到的第一個就是最大的。

          import java.sql.DriverManager;


          public class Abc {

          ?
          ?? public?? static?? String?? getSubString(String?? s1,?? String?? s2)?? {??
          ??? if?? (s1.length()?? >?? s2.length())?? {??
          ??? String?? temp?? =?? s1;??
          ??? s1?? =?? s2;??
          ??? s2?? =?? temp;??
          ??? }??
          ??? int?? n?? =?? s1.length();??
          ??? int?? index?? =?? 0;??
          ??? ok:? for?? (;?? n?? >?? 0;?? n--)?? {??
          ??? for?? (int?? i?? =?? 0;?? i?? <?? s1.length()?? -?? n?? +?? 1;?? i++)?? {??
          ??? String?? s?? =?? s1.substring(i,?? i?? +?? n);??
          ??? if?? (s2.indexOf(s)?? !=?? -1)?? {??
          ??? index?? =???? i;??
          ??? break?? ok;??
          ??? }??
          ??? }??
          ??? }??
          ??? return?? s1.substring(index,?? index?? +?? n);??
          ??? }
          ??public static void main(String[] args) throws Exception {
          ???String a="abnajfkabcdefghijklmnkajftwtlkwrejtrewq";
          ???String b="jljafabcdefghijklmnlkfjieoijjflja";
          ???
          ???String result=getSubString(a,b);
          ???System.out.println("result============="+result);
          ??
          ??}
          }

          posted on 2007-07-19 16:58 源自有緣 閱讀(1628) 評論(0)  編輯  收藏

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


          網站導航:
           
          主站蜘蛛池模板: 安顺市| 河津市| 嘉祥县| 宿松县| 阿拉尔市| 五华县| 吉林市| 白玉县| 台东县| 镇江市| 大新县| 雷山县| 马龙县| 昭觉县| 巴中市| 曲水县| 乐至县| 浦城县| 包头市| 绿春县| 万山特区| 襄樊市| 遵化市| 龙州县| 平定县| 文昌市| 定襄县| 东兴市| 屏东县| 蛟河市| 东源县| 金秀| 泰州市| 泌阳县| 剑川县| 盈江县| 昌吉市| 芷江| 故城县| 平舆县| 蓝山县|