乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      字符子串 任意組合 遞歸

       孤步 2012-07-30

      /************************************************************************/

      /* 面試題:請編寫一個(gè)函數(shù),把字符串中的所有字符子串的各種組合形式全部都顯示出來。

       

        字符子串的長度范圍是從一個(gè)字符到字符串的長度。

        不管排列順序如何,只要兩種組合中的字符完全一樣,它們就是同一種組合。

        比如:給定字符串"hart",則"ha""har"是不同的組合,而"ha""ah"是相同的組合。

       

        排列方式:不以字符串多少為排列區(qū)分,而是以是否確定某一字符來確定字符子串

        hart作為字符串,則如下:

        h        ha  har  hart hat hr hrt      ht

                     a   ar   art  at

                                                        r  rt

                                                                       t

       

        可以看出:第一行全有h,第二行沒有h,全是art,第三行沒有ha,全是rt,第四行沒有har,就只有t

        如果第一行去掉 h,恰好是 第二行 第三行 第四行 的全部,正好是 3個(gè)字符art的組合,

        再黏上一個(gè) h ,就成了新的組合。

        根據(jù)這樣的特點(diǎn):我們設(shè)計(jì)一個(gè)遞歸算法

        1)從首字符到尾字符的各個(gè)字符,循環(huán)

        2)輸出被循環(huán)到的字符

        3)如果循環(huán)的字符 后面還有字符,遞歸;以后面的字符為起點(diǎn),重復(fù)步驟(2)和步驟(3

        4)如果被循環(huán)到的字符后面沒有字符,跳出循環(huán)。

       

        畫圖的話,看成如下:以行為單位輸出,1表示此字符輸出

          h a r t             h a r t 

        h 1 . . .                      h 1 . . .

        a 1 1 . .    --   a 1 1 . .

        r 1 1 1 .                     r 1 1 . 1 //下一行返回后,本行往下一列進(jìn)行,后面的依次類推

        t 1 1 1 1(return  t 1 1 1 1

                                                                           */

      /************************************************************************/

       

      #include <stdlib.h>

      #include <stdio.h>

      #include <iostream>

      using namespace std;

       

      int length;

      char *out;

      char str[]="hart";  //此法當(dāng)有重復(fù)字母時(shí),結(jié)果是錯(cuò)誤的

      int sum=0;

       

      void DoCombine(char in[],char out[],int length,int rec,int start)//rec看成行,

      {

             int i;

             for( i = start; i < length; i++)//i看成列

             {

                    out[rec] = in[i];

                    out[rec+1] =0;

                    printf("%s\n",out);

                    if(i< length-1)

                           DoCombine(in,out,length,rec+1,i+1);

             }

      }

      int main(int argc, char* argv[])

      {

             length = strlen(str);

             out = (char *)malloc(length +1);

             DoCombine(str,out,length,0,0);

             getchar();

             return 0;

      }

       

        本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報(bào)。
        轉(zhuǎn)藏 分享 獻(xiàn)花(0

        0條評(píng)論

        發(fā)表

        請遵守用戶 評(píng)論公約

        類似文章 更多