程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> .NET實例教程 >> 某知名IT公司最近的一道筆試編程題(C#)

某知名IT公司最近的一道筆試編程題(C#)

編輯:.NET實例教程

給定任一字符串(可以有中文),長度為任意,要求找出其出現次數最多的字符及計算次數。 

using System;
using System.Collections.Generic;
using System.Text;

namespace Test
{
    class Program
    {
        public static void getMaxchar(String s)
        {
            char[] c = s.ToCharArray();
            item[] ht = new item[c.Length];         //最壞的情況下(每個字符均不一樣),需要c.Length個存儲單元

            for (int i = 0; i <= c.Length - 1; i++)
            {     //賦初值,防止出現空指針引用 ********小心******

                ht[i] = new item();
            }

            item Maxitem = ht[0];
            for (int i = 0; i <= c.Length - 1; i++)
            {
                int unicode = (int)c[i];              // 獲得字符的unicode值 ()
                int position = unicode % c.Length;      //自定義的Hash函數

                if (ht[position].count == 0)
                {       //第一次掃描到的字符放入數組中
                    ht[position].a = c[i];
                  

  ht[position].count = 1;
                }
                else
                    if (ht[position].a == c[i])      //掃描到了同樣的字符,count加1
                        ht[position].count++;
                    else
                        for (int j = position + 1; j != position - 1; position++)
                        {  //Hash表發生地址沖突,用線形探測法解決地址沖突
                            if (ht[position].count == 0)
                            {
                                ht[position].a = c[i];
                                ht[position].count = 1;                            //找到空位置,插入
                                break;
    

;                        }                                    // 找到,跳出循環     
                            if (position == c.Length - 1)                    //往後找,無空位可插入,則往前找
                                position = 0;
                     &nbs

p;  }

            }
            for (int i = 1; i <= c.Length - 1; i++)
            {              //遍歷數組,找到一個最大值

                if (ht[i].count > Maxitem.count)
                    Maxitem = ht[i];
            }


            for (int i = 1; i <= c.Length - 1; i++)
            {               //遍歷數組,找到所有的最大值,譬如”31212“這種多個最大值情況
                if (ht[i].count == Maxitem.count)
          &nbsp;         Console.WriteLine("出現次數最多的字符是:" + ht[i].a + "  次數是:" + ht[i].count);
            }
        }
        static void Main(string[] args)
        {
            getMaxchar(("本代碼IT5552341985euiollgjIT5riugjkj51ITIT1IT45ITITdjjkklITITdfjIT陽"));
            Console.ReadLine();
        }
    }
    class item
    {                    //定義哈希表中的元素
        public char a;
        public int  count=0;
        public item()
        {
            this.a = '' '';
            this.count = 0;
        }
    }
}



  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved