• <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第一個只出現(xiàn)一次的字符

                             第一個只出現(xiàn)一次的字符

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

                缺點:
                      需要存儲首次出現(xiàn)的下標,造成存儲位置浪費。
                      
            #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//若是首次出現(xiàn)下標,則統(tǒng)計 
                        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數(shù)組,掃描到對應(yīng)的字符,即更新hash表內(nèi)存儲出現(xiàn)的次 數(shù)。
             需要兩次掃描字符串,第一次掃描統(tǒng)計字符串的出現(xiàn)次數(shù),第二次掃描確定出現(xiàn)一次的字符及其位置 ,比方法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) //掃描第二遍,當掃描都出現(xiàn)次數(shù)為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 閱讀(524) 評論(0)  編輯 收藏 引用 所屬分類: 算法相關(guān)

            99久久99久久精品国产| 99久久这里只精品国产免费| 久久久久久午夜成人影院| 亚洲精品乱码久久久久久| 国产情侣久久久久aⅴ免费| 狠狠狠色丁香婷婷综合久久五月| 久久精品中文字幕久久| 久久久久久免费视频| 国产91色综合久久免费| 久久精品国产清自在天天线| 久久只这里是精品66| segui久久国产精品| 中文字幕无码精品亚洲资源网久久| av无码久久久久久不卡网站| 欧美久久久久久精选9999| 99久久国产宗和精品1上映 | 亚洲欧洲精品成人久久奇米网| 亚洲人成伊人成综合网久久久| 91亚洲国产成人久久精品| 精品人妻伦九区久久AAA片69| 国产高潮国产高潮久久久91 | 久久有码中文字幕| 99国产精品久久久久久久成人热| 亚洲欧洲久久久精品| 亚洲国产成人久久精品动漫| 久久婷婷五月综合97色直播| 亚洲中文久久精品无码| 人妻无码久久精品| 精品久久一区二区三区| 日产精品久久久久久久| 欧美午夜A∨大片久久 | 无码人妻少妇久久中文字幕| 狠狠狠色丁香婷婷综合久久五月| 久久99精品久久只有精品| 亚洲中文久久精品无码ww16 | 久久综合久久自在自线精品自| 一级女性全黄久久生活片免费 | 模特私拍国产精品久久| 人人狠狠综合久久亚洲高清| 国产精品免费久久久久影院| www亚洲欲色成人久久精品|