Wednesday, April 8, 2020

Đếm số lần xuất hiện ký tự trong chuỗi Java

Câu hỏi phỏng vấn kỹ thuật phổ biến trong javađế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.
Đếm số lần xuất hiện ký tự trong chuỗi Java

Vì 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
public class EachCharacterCountInString
{
 public static void main(String[] args)
    {
       characterCount("Alive is Awesome");

       characterCount("Java Hungry");

       characterCount("USA has 50 states");
    }

 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);
    }
   
}
Kết quả:
{ =2, A=1, a=1, s=2, e=3, v=1, w=1, i=2, l=1, m=1, o=1}
{ =1, a=2, r=1, u=1, v=1, g=1, H=1, y=1, J=1, n=1}
{ =3, 0=1, A=1, a=2, S=1, s=3, t=2, U=1, 5=1, e=1, h=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

Sau đây là chương trình:
public class  AlphabetFrequencyString {
 

    static int i,j,k,c=0,w;
 
    static char m;                      //we can only define static for variables and fns not for arrays
 
    public static void main(String[] args) {
        System.out.println("Input string is : ");
        System.out.println("Alive is awesome");
        System.out.println("");
        System.out.println("");
        System.out.println("Output :");
        frequencycount("Alive is awesome");
    }
 
 
    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+",");
        }
    }
 
}

No comments:

Post a Comment