Bài tập tìm từ dài nhất trong chuỗi

E đang có bài tìm từ dài nhất trong chuỗi vd “happy new year”
làm ntn để tìm đc từ happy v mn, e cảm ơn

bạn đã làm như thế nào để ra được kết quả là từ happy dài nhất?

2 Likes

Mình chưa làm đc, nên mới hỏi mn á

mình không hỏi bạn code
mà hỏi bạn nhìn vào chuỗi đó, suy nghĩ và giải như thế nào để ra được chữ happy, không phải code

3 Likes

chưa nói đến code vội, ông nghĩ sẽ làm gì để tìm được từ dài nhất

1 Like

Mình tính độ dài của từng từ trong chuỗi

Như thế nào là “từ”, như thế nào là độ dài của “từ”?

2 Likes
public static String findLonggestWord(String a) {
    Hashtable<String, Integer> b = new Hashtable<>();
    String x = "";
    int max = 0;
    int length = 0;
    for (int i = 0; i <= a.length(); i++) {
        if (i == a.length()) {
            if (length >= max) {
                max = length;
            }
            b.put(x, x.length());
        } else {
            Character c = a.charAt(i);
            if (c != ' ') {
                x += String.valueOf(c);
                length++;
            } else {
                b.put(x, x.length());
                if (length >= max) {
                    max = length;
                }
                length = 0;
                x = "";
            }


        }

    }
    String longgest = null;
    Set<String> keySet = b.keySet();
    for (String key : keySet) {
        if (b.get(key) == max) {
            longgest = key;
            return longgest;
        }


    }
    return null;
}
  1. duyêt qua String a, lấy character c ở vị trí i, c= a.charAt(i);
  2. cộng chuỗi x; x+=String.valueOf(char c);
  3. 1 tạo 1 biến tên là length để ghi nhận độ dài của từng chữ, rồi gán vào max, max là chữ dài nhất
  4. gặp dấu ‘(space)’ thì put() vào HashTable với key,value là String x, x.length;

Cuối cùng duyệt qua hashmap b, trả về chuỗi có độ dài là max…

public static String findW(String a) {
    int i = 0;
    String x = "";
    String y = "";
    while (true) {
        if (a.charAt(i) != ' ') {
            x += String.valueOf(a.charAt(i));
            i++;
        } else {
            break;
        }
    }
    for (int j = i; j <= a.length(); j++) {
        if (j==a.length()) {
            if(x.length()<y.length()){
                x=y;
            }
        } else {
            Character c=a.charAt(j);
            if(c!=' '){
                y+=String.valueOf(c);
            }else{
                if(x.length()<y.length()){
                    x=y;
                }
            }
        }

    }
    return x;
}

@nguyen_thu2, không cần làm phức tạp vậy đâu
chỉ cần 1 vòng lặp là đủ

ketqua = '' // biến này để lưu kết quả
dem = '' // biến tạm thôi
for (lặp để lấy lần lượt từng kí tự của chuỗi) {
    // gọi kí tự ở vị trí i là ci
    // mỗi kí tự sẽ thuộc một từ (có thể hiểu đơn giản là a-z), hoặc không phải (khoảng trắng)
    // bởi thế nên mới hỏi ngược lại bạn kia là như thế nào mới là "từ"
    if (ci là là kí tự từ) {
        dem+= ci // ta ghi nhận độ dài của từ hiện tại tăng thêm 1
   }
   else {
        dem = '' // nếu gặp kí tự không phải là từ (khoảng trắng) thì reset biến đếm
    }
    ketqua = max(dem, ketqua) // với mỗi kí tự, lấy kết quả tốt hơn, max ở đây trả về chuỗi dài hơn
}

để cho dễ thì biểu diễn như này sửa khoảng trắng thành _ cho dễ nhìn

đoạn này thay vì là những con số thì nó sẽ là chuỗi
ci     : h a p p y _ n e w _ y e a r
dem    : 1 2 3 4 5 0 1 2 3 0 1 2 3 4
ketqua : 1 2 3 4 5 5 5 5 5 5 5 5 5 5

thậm chí nhìn if/else kia nó dài dòng vậy thôi chứ dùng phép toán 3 ngôi thì đoạn đó chỉ có 1 dòng code

5 Likes

. Kết quả trả về là gì? là chuỗi với độ dài là dài nhất. chứ ko phải độ dài của chuôiz

đã cập nhật lại rồi bạn, vẫn y chang như vậy thôi

4 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?