30/09/2018, 17:41

Thuật toán thống kê được các từ xuất hiện trong 1 chuỗi trong Java?

Cho mình hỏi là làm sao thống kê được các từ xuất hiện trong 1 chuỗi vd:
Chuỗi m nhập vào là: anh dang doi
Yêu cầu in ra:
ky tu a xuat hien 2 lan
ký tự n xuat hien 2 lan
ký tự h xuất hiện 1 lần
ký tự d xuất hiện 2 lần
ký tự g xuất hiện 1 lần
ký tự o xuất hiện 1 lần
ký tự i xuất hiện 1 lần

tu an xuat hien 1 lan
tương tu cac tu tiep theo

Ai biết gợi ý mình thuật toán với , nếu java càng tốt nak
Xin cảm ơn @@ rất nhiều

Nguyễn Duy Khánh viết 19:45 ngày 30/09/2018

Các đơn giản nhất đó là dùng 1 mảng kí tự để lưu những kí tự xuất hiện trong mảng, 1 mảng số nguyên lưu số lần xuất hiện. Duyệt từ đầu chuỗi tới cuối chuỗi, sau đó trong mỗi phần tử lại duyệt ngược lại đầu, nếu trùng thì tăng biến đếm.

Gió viết 19:54 ngày 30/09/2018

Dùng Map trong java cho tiện

####đếm số lần xuất hiện mỗi từ

/* package whatever; // don't place package name! */

import java.util.*;
import java.lang.*;
import java.io.*;

/* Name of the class has to be "Main" only if the class is public. */
class Ideone
{
    public static void main (String[] args) throws java.lang.Exception
    {
        Scanner sn=new Scanner(System.in);
        String s=sn.nextLine();
        String [] arr=s.split("\\s+");
        
        Map<String,Integer> map=new HashMap<String,Integer>();
        for(String x: arr){
            if(map.containsKey(x)){
                map.put(x,map.get(x)+1);
            }else{
                map.put(x,1);
            }
        }
        for(Map.Entry<String,Integer> entry: map.entrySet()){
            System.out.println(entry.getKey()+" "+entry.getValue());
        }
    }
}

###đếm số lần xuất hiện chữ cái
thay s.split("\\s+") thành s.split("")

Lê Trường viết 19:42 ngày 30/09/2018

cảm ơn @Gio nhiều.

Chi Ngo viết 19:50 ngày 30/09/2018

Mình thấy có cách này hay mà không cần đao to búa lớn gì cả, chỉ có một mẹo nhỏ thôi.
Ta biết rằng mỗi ký tự thì tương ứng với 1 số nguyên và số ký tự ASCII thì là hữu hạn. Chính vì thế, ta sẽ tạo ra một mảng số nguyên có 256 ký tự. Bạn đầu đặt tất cả các phần tử bằng không. Tiếp theo dùng vòng lặp như sau:

int[] statistics = new int[256];
for(int i = 0;i < m.length(); i ++) {
      char c = m.getCharAt(i);
      statistics[(int)c] ++;
}

Đoạn mã trên là cho Java nhé, C cũng tương tự thôi. Cuối cùng ta xem lại mảng statistics, những phần tử nào khác 0 thì ta sẽ in số lần xuất hiện ra. Nên nhớ, cách này chỉ là mẹo trong trường hợp bảng chữ cái là hữu hạn thôi nhé :D.

Lê Trường viết 19:45 ngày 30/09/2018

cảm ơn b, m xem nó đã nhé

Bài liên quan
0