Đừng muaCó bác nào học khóa "Cấu trúc dữ liệu và giải thuật Thực chiến với LeetCode'' của The Brown Box chưa? Cho e xin ít review với.
class Solution {
fun repeatedSubstringPattern(s: String): Boolean {
fun checkRepeated(length: Int): Boolean {
if (s.length % length != 0) return false
val n = s.length / length
val origin = s.substring(0, length)
for (i in 1 until n) {
val index = i * length
if (s.substring(index, index + length) != origin) return false
}
return true
}
for (i in 1..(s.length / 2)) {
if (s[i] == s[0] && checkRepeated(i)) return true
}
return false
}
}
đừng mua ,trên udemy có mấy ông nước ngoài giải free màCó bác nào học khóa "Cấu trúc dữ liệu và giải thuật Thực chiến với LeetCode'' của The Brown Box chưa? Cho e xin ít review với.
DP áp dụng binary search thím.đếm số longest increase subsequence nlogn làm thế nào các bác nhỉ
class Solution:
def repeatedSubstringPattern(self, s: str) -> bool:
len_s = len(s)
for i in range(1, len_s):
if s[0] == s[i]:
subString = s[0:i]
if subString * (len_s // i) == s:
return True
return False
đang mắc chỗ đếm số ấy bác chứ dài nhất thì dễ rồi bácDP áp dụng binary search thím.
À đếm số thì mình không chắc, chắc vẫn trace được.

đang mắc chỗ đếm số ấy bác chứ dài nhất thì dễ rồi bác![]()
anh có thể dùng segment tree, em nghĩ vẫn là O(nlogn). Cụ thể em nghĩ như sau:đang mắc chỗ đếm số ấy bác chứ dài nhất thì dễ rồi bác![]()

anh có thể dùng segment tree, em nghĩ vẫn là O(nlogn). Cụ thể em nghĩ như sau:
- mx[a] sẽ lưu độ dài của LIS kết thúc tại a
[*]ta cập nhật kết quả bằng cách update mx[a] = max(mx[a], max(mx[0],mx[1],...,mx[a-1]) + 1)
[*]Như trên mới chỉ là cách để tìm LIS
[*]ta sẽ lưu thêm một biến phụ là way[x] để đánh dấu số cách kết thúc LIS tại một điểm x nào đó với độ dài mx[x] để tìm số LIS
[*]ta có công thức way[x] = sum of (way[y]) với y là các giá trị thỏa mãn mx[x] = mx[y] + 1
Em không có trang nào để submit thử. Leetcode tự nhiên bắt unlock premium mới cho![]()

đây bác bài 4anh có thể dùng segment tree, em nghĩ vẫn là O(nlogn). Cụ thể em nghĩ như sau:
- mx[a] sẽ lưu độ dài của LIS kết thúc tại a
[*]ta cập nhật kết quả bằng cách update mx[a] = max(mx[a], max(mx[0],mx[1],...,mx[a-1]) + 1)
[*]Như trên mới chỉ là cách để tìm LIS
[*]ta sẽ lưu thêm một biến phụ là way[x] để đánh dấu số cách kết thúc LIS tại một điểm x nào đó với độ dài mx[x] để tìm số LIS
[*]ta có công thức way[x] = sum of (way[y]) với y là các giá trị thỏa mãn mx[x] = mx[y] + 1
Em không có trang nào để submit thử. Leetcode tự nhiên bắt unlock premium mới cho![]()

public class Solution {
public string ConvertToTitle(int columnNumber) {
var result = new StringBuilder();
while(columnNumber != 0)
{
columnNumber--;
result.Insert(0, (char)(columnNumber%26 + 'A'));
columnNumber = columnNumber/26;
}
return result.ToString();
}
}
string convertToTitle(int n) {
string res;
for (; n > 0; n = (n - 1) / 26) res += (n - 1) % 26 + 'A';
reverse(begin(res), end(res));
return res;
}
ko làm 1 dòng được là medium ròi![]()
C++:string convertToTitle(int n) { string res; for (; n > 0; n = (n - 1) / 26) res += (n - 1) % 26 + 'A'; reverse(begin(res), end(res)); return res; }
string convertToTitle(int c) {
string res = "";
while (c-- > 0) {
res = char (c %26 + 'A') + res;
c /= 26;
}
return res;
}
ơ cái c-- ngon vậy mà ko nghĩ raxài reverse là thấy dở rồi
C++:string convertToTitle(int c) { string res = ""; while (c-- > 0) { res = char (c %26 + 'A') + res; c /= 26; } return res; }
struct Solution {
string convertToTitle(int n) {
for (string res;; n /= 26)
if (n--) res = static_cast<char>(n % 26 + 'A') + res; else return res;
}
};
Đọc 2 cuốn sách của Alex Xu chắc đủ r bác với course advanced sys desgign của designguru nếu bác muốn tìm hiểu distributed systems, chứ mình thấy system design video course chỗ nào cũng na ná nhau.Lên 400 bài chắc bắt đầu mua course system design học tiếp.
