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ài tập tìm từ dài nhất trong chuỗi
bạn đã làm như thế nào để ra được kết quả là từ happy dài nhất?
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
chưa nói đến code vội, ông nghĩ sẽ làm gì để tìm được từ dài nhất
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ừ”?
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;
}
- duyêt qua String a, lấy character c ở vị trí i, c= a.charAt(i);
- cộng chuỗi x; x+=String.valueOf(char c);
- 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
- 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
. 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