Cho em hỏi trong java ngoài cách duyệt mảng bằng vòng lặp for, for each, while, do while thì còn cách nào không ạ?
Hiện tại em đang có code như thế này cho em hỏi có cách nào tối ưu thời gian chạy của nó hơn không ạ?
Đề bài: Nhiệm vụ của bạn là viết một chương trình của một từ điển đơn giản, thực hiện các lệnh sau:
insert str
: chèn xâustr
vào từ điển hiện tại.find str
: nếu hiện tại, xâustr
nằm trong từ điển thì trả về"yes"
, ngược lại là"no"
.Với đầu vào là một tập các lệnh
insert
vàfind
và ban đầu từ điển sẽ rỗng. Bạn hãy trả về một mảng kết quả cón
phần tử, trong đón
chính là số lượng lệnhfind
có trong input và kết quả thứi
chính là lầnfind
thứi
.Lưu ý: Các lệnh sẽ được thực hiện theo thứ tự.
Đầu vào/Đầu ra:
- [Giới hạn thời gian chạy]: 1 giây với C++, 6 giây với Java và C#, 8s với Python, GO và Js.
- [Giới hạn bộ nhớ]: 128 MB
- [Đầu vào] array of strings arr_op
1 ≤ arr_op.size() ≤ 2 x 105
Đảm bảoarr[i]
chỉ có thể là một trong2
dạng"insert str"
hoặc"find str"
1 ≤ str.size() ≤ 12
Đảm bảo xâustr
chỉ là chứa1
trong4
ký tự'A', 'C', 'G', 'T'
.- [Đầu ra] Array of String
Một mảng có n phần tử, trong đó n là số lượng lệnh find và phần từ thứ i là kết quả của lần find thứ i.
Code của em:
static String[] dictionary(String[] arr_op) {
ArrayList<String> temp = new ArrayList<>();
ArrayList<String> result = new ArrayList<>();
for (int i = 0; i < arr_op.length; i++) {
if (arr_op[i].contains("insert")) {
temp.add(arr_op[i].substring(7));
} else {
if (temp.contains(arr_op[i].substring(5)) == true ) {
result.add("yes");
} else {
result.add("no");
}
}
}
return result.toArray(new String[0]);
}
Em cảm ơn nhiều ạ.