• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            jake1036

            面試100 13第一個只出現一次的字符

                             第一個只出現一次的字符

              方法1 :
                        第一個只出現一次的字符。
                       (1)考慮使用一個hash表,將各個字符映射到表中,然后表中存儲有該字符出現的次數,以及首次出現的下標。
                       (2)映射完成之后,掃描hash數組查找出現次數為1的字符,并且其首次出現下標為最小。

                缺點:
                      需要存儲首次出現的下標,造成存儲位置浪費。
                      
            #include <iostream>
            #include 
            <vector>
            #include 
            <iterator>
              
            using namespace std ;
             
              
            struct Value{
                 
            int times ;
                 
            int index ;        
              }
             ;
              
            const int N = 26 ;
              
            const int MAX = 66536 ;
              
            int hashstr(char * s , Value * list )
              
            {
                   
            int i = 0 ;
                   
            int index = MAX ;
                   
                  
            if(s == 0
                    
            return index;
                    
                  
            while(*!= '\0')
                    
            {
                      list[
            *s-'a'].times++ ;
                      
            if(list[*s-'a'].index == -1//若是首次出現下標,則統計 
                        list[*s-'a'].index = i ;           
                        i
            ++;
                        s
            ++;
                    }

                      
                   
                   
            for(i = 0 ;i < N ; i++)
                   
            {
                     
            if(list[i].times == 1)
                        
            {
                          
            if(index > list[i].index)   //求最小的下標       
                           index = list[i].index ;                     
                        }
                   
                   }

                   
            return index ;
              }

             
              
            int main()
              
            {
                
            int i ;
              
                
            char s[] = "wabacckdeffbzw" ; 
                Value  list[N] ;
               
                 
            for(i = 0;i < N ;i++)
                 
            {
                   list[i].times 
            = 0 ;
                   list[i].index 
            = -1 ;                     
                 }
             
               
                
            int index = hashstr(s , list) ;
                
            if(index == MAX)
                   cout
            <<"error"<<endl ;
                 
            else
                   cout
            <<s[index]<<endl ;
                    
                system(
            "pause") ;
                
            return 0 ;    
              }

              



              方法2 :

                建立一個長度為256的hash數組,掃描到對應的字符,即更新hash表內存儲出現的次 數。
             需要兩次掃描字符串,第一次掃描統計字符串的出現次數,第二次掃描確定出現一次的字符及其位置 ,比方法1,比較省空間。 
             
              代碼如下:
               
            #include <iostream>
             
            using namespace std ;
             
            const int N = 256 ;
             
             
            void hashstr(char * s , int * a)
             
            {
                
            char * p = s ;   
                
            while(*p)
                
            {
                  a[
            *p]++ ; //自增       
                  p++ ;         
                }
              
                
                
            while(*s) //掃描第二遍,當掃描都出現次數為1的字符,即停止 
                {
                  
            if(a[*s] == 1)
                  
            {
                    cout
            <<*s ;
                    
            break
                  }

                  s
            ++ ;         
                }

                
                  
             }

             
             
            int main()
             
            {
               
            char s[] = "wabacckdeffbz" ;
               
            int  a[N] ;
               memset(a , 
            0 , sizeof(a)) ;
               hashstr(s , a) ;
               system(
            "pause") ; 
               
            return 0 ;    
             }





            posted on 2011-05-17 10:25 kahn 閱讀(540) 評論(0)  編輯 收藏 引用 所屬分類: 算法相關

            久久天天躁狠狠躁夜夜avapp| 无码人妻少妇久久中文字幕| 国产精品久久婷婷六月丁香| 狠狠色综合久久久久尤物| 精品乱码久久久久久夜夜嗨| 久久国产视频99电影| 色播久久人人爽人人爽人人片AV| 久久天天躁狠狠躁夜夜不卡| 精品久久久久久无码专区| 国产精品18久久久久久vr| 2021国产精品午夜久久| 无码AV波多野结衣久久| 99热热久久这里只有精品68| 超级碰碰碰碰97久久久久| 久久精品成人国产午夜| 久久这里都是精品| 青青青国产成人久久111网站| 亚洲欧美一区二区三区久久| 精品久久香蕉国产线看观看亚洲 | 国产99久久九九精品无码| 日韩va亚洲va欧美va久久| 99久久精品国产免看国产一区| 久久婷婷色综合一区二区| 久久亚洲欧美国产精品| 一本一道久久a久久精品综合| 成人久久精品一区二区三区| 中文国产成人精品久久亚洲精品AⅤ无码精品| 无码专区久久综合久中文字幕| 精品久久久久久久中文字幕 | 亚洲国产一成久久精品国产成人综合 | 亚洲国产综合久久天堂| 久久人人爽人人澡人人高潮AV | 三级片免费观看久久| 精品国产青草久久久久福利| 91久久精一区二区三区大全| 久久婷婷是五月综合色狠狠| 国内精品久久久久久麻豆| 日本三级久久网| 9191精品国产免费久久| 亚洲精品国产成人99久久| 国产精品久久久久天天影视|