Lập trình Java - Đếm số lần xuất hiện ký tự trong chuỗi

Câu hỏi phỏng vấn kỹ thuật phổ biến trong java là đếm sự xuất hiện của một từ cụ thể trong chuỗi nhưng nếu người phỏng vấn yêu cầu đếm tổng số lần mỗi bảng chữ cái xuất hiện trong chuỗi. Đó là câu hỏi, logic mà bạn cần phải suy nghĩ tại thời điểm đó và thật đáng buồn là không có phương thức java cơ bản tích hợp nào để cung cấp cho bạn câu trả lời trực tiếp bằng cách chuyển chuỗi đầu vào.

ì vậy, để chuẩn bị cho loại câu hỏi như vậy, tôi đã chia sẻ mã chương trình dưới đây.
Chuỗi đầu vào: "Alive is awesome"
Kết quả: A = 1, l = 1, i = 2, v = 1, e = 3, = 2, s = 2, a = 1, w = 1, o = 1, m = 1

1. Chương trình/Thuật toán cho số lần xuất hiện của ký tự trong chuỗi trong Java

Tôi sẽ sử dụng HashMap để đếm số lần xuất hiện của Ký tự trong Chuỗi trong java. Nó sẽ có Ký tự là khóa và số lần xuất hiện của nó là giá trị. Đầu tiên chúng ta sẽ chuyển đổi chuỗi đã cho thành mảng char. Sau đó, chúng ta sẽ duyệt qua mảng char và tăng giá trị của nó lên 1 cho mỗi Ký tự có trong chuỗi đầu vào.

Để hiểu được vấn đề này hãy tìm hiểu về mảng trong java:


import java.util.HashMap;

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

/**
 *
 * @author ADMIN
 */
public class EachCharacterCountInString {

    /**
     * @param args the command line arguments
     */
    static void characterCount(String inputString)
    {
        //Creating a HashMap, key :Character  value : occurrences as Integer

        HashMap<Character, Integer> eachCharCountMap = new HashMap<Character, Integer>();
        //Converting inputString to char array
        char[] charArray = inputString.toCharArray();

        //traversal of each Character of charArray

        for (char c : charArray)
        {
            if(eachCharCountMap.containsKey(c))
            {
                //If char is present in eachCharCountMap, increment count by 1
                eachCharCountMap.put(c, eachCharCountMap.get(c)+1);
            }
            else
            {                //If char is not present in eachCharCountMap,
                //Putting this char to eachCharCountMap with 1 as it's initial value

                eachCharCountMap.put(c, 1);
            }
        }

        //Showing the eachCharCountMap

        System.out.println(eachCharCountMap);
    }
   
    public static void main(String[] args) {
        // TODO code application logic here
       characterCount("Thich Hoc Lai");
       characterCount("Thich Thi Lai");
       characterCount("Thi Qua Mon");
    }
    
}

Kết quả chạy chương trình:

{ =2, a=1, c=2, T=1, h=2, H=1, i=2, L=1, o=1}
{ =2, a=1, c=1, T=2, h=3, i=3, L=1}
{ =2, Q=1, a=1, T=1, u=1, h=1, i=1, M=1, n=1, o=1}

2. Chương trình/Thuật toán cho số lần xuất hiện của Ký tự trong Chuỗi trong Java (Không sử dụng HashMap)

* Chúng tôi lưu trữ chuỗi đầu vào trong một mảng ký tự (bên dưới z). (Chúng tôi muốn tạo một mảng ký tự z mà không có bất kỳ bảng chữ cái trùng lặp nào)
   * Chúng tôi bắt đầu duyệt qua chuỗi trong mảng z [i].
           cho i = 0 đến i <z.length

               Lưu trữ ký tự tại chỉ mục i là z [i] trong biến tạm thời ch
                               cho z [i + 1] đến z.length
                                           if ch bằng với bất kỳ phần tử nào của phần còn lại của các ký tự mảng
                                               sau đó di chuyển con trỏ đến chỉ mục tiếp theo và giảm độ dài của chuỗi xuống 1
                                               set s [k] = s [k + 1] // xóa bảng chữ cái đã có trong mảng z
                                               đặt j = i

    * Tạo một mảng số nguyên mới để lưu trữ tổng số lần xuất hiện của bảng chữ cái trong chuỗi (bên dưới t)

    * So sánh mọi phần tử của chuỗi s với mọi phần tử của mảng ký tự z
                      nếu cả hai đều bằng nhau
                             tăng số lượng lên 1
         Thêm giá trị đếm cuối cùng vào mảng t (được sử dụng để lưu trữ số đếm cuối cùng của tổng số lần xuất hiện của bảng chữ cái trong chuỗi)

    * In số lượng của bảng chữ cái

Mã nguồn chương trình:

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

/**
 *
 * @author ADMIN
 */
public class AlphabetFrequencyString {

    /**
     * @param args the command line arguments
     */
    static int i,j,k,c=0,w; 
    static char m;  //we can only define static for variables and fns not for arrays
    static void frequencycount(String s) 
    {
        char[] z=new char[s.length()];
        for(w=0;w<s.length();w++)
        z[w]=s.charAt(w);
        for(i=0;i<w;i++)
        {
            char ch=z[i];
            for(j=i+1;j<w;j++)
            {
                if(z[j]==ch)
                {
                    for(k=j;k<(w-1);k++)
                    z[k]=z[k+1];
                    w--;
                    j=i;
                }
            }
        }
     
        int[] t=new int[w];
        for(i=0;i<w;i++)
        {
            for(j=0,c=0;j<s.length();j++)
            {
                if(z[i]==s.charAt(j))
                c++;
            }
            t[i]=c ;
            System.out.print(z[i]+"="+c+",");
        }
    }
    public static void main(String[] args) {
        // TODO code application logic here
        System.out.println("Nhap chuoi : ");
        System.out.println("Thich Qua Mon");
        System.out.println("");
        System.out.println("");
        System.out.println("Ket qua :");
        frequencycount("Thich Qua Mon");
    }
    
}

Kết quả chạy chương trình:

Nhap chuoi : 
Thich Qua Mon


Ket qua :
T=1,h=2,i=1,c=1, =2,Q=1,u=1,a=1,M=1,o=1,n=1,