thảo luận Leetcode mỗi ngày

  • Người tạo chủ đề Người tạo chủ đề _Gia_Cat_Luong_
  • Ngày bắt đầu Ngày bắt đầu
Trạng thái
Không mở để trả lời thêm.
Java:
class Solution {
    public boolean areSentencesSimilar(String sentence1, String sentence2) {
        String shorterStr, longerStr;
        if (sentence1.split(" ").length < sentence2.split(" ").length) {
            shorterStr = sentence1;
            longerStr = sentence2;
        } else {
            shorterStr = sentence2;
            longerStr = sentence1;
        }

        String[] arr1 = shorterStr.split(" "), arr2 = longerStr.split(" ");
        int n = arr1.length, m = arr2.length;

        int idx = 0;
        while (idx < n) {
            if (!arr1[idx].equals(arr2[idx])) {
                break;
            }
            idx++;
        }

        while (idx < n) {
            if (!arr1[idx].equals(arr2[m - n + idx])) {
                return false;
            }
            idx++;
        }

        return true;
    }
}
 
dăm ba cái bài tập cho sv năm 3 năm 4 làm chứ có cái gì khó đâu nhỉ 🤔 bỏ thời gian học chút là ez, ez, giống mấy bạn luyện LC thôi 😁
 
bác làm lĩnh vực gì mà học toán kinh thế, nhìn toàn chữ là chữ
lWCRPw0.png
Em học Toán bên Sorbonne bác ạ.
 
dăm ba cái bài tập cho sv năm 3 năm 4 làm chứ có cái gì khó đâu nhỉ 🤔 bỏ thời gian học chút là ez, ez, giống mấy bạn luyện LC thôi 😁
thật ra thì lúc em học thì đúng là làm bài mượt thật, nhưng mà học xong lâu không vận dụng thì kiến thức nó bị phai nhạt dần thôi, nên em nể mấy bác có thể học xong mà sau này vẫn làm bài vanh vách. Chắc một phần do hồi xưa em học dạng tủ với thực dụng là chính.
 
thật ra thì lúc em học thì đúng là làm bài mượt thật, nhưng mà học xong lâu không vận dụng thì kiến thức nó bị phai nhạt dần thôi, nên em nể mấy bác có thể học xong mà sau này vẫn làm bài vanh vách. Chắc một phần do hồi xưa em học dạng tủ với thực dụng là chính.
Cũng do đặc thù của Toán nữa đó bác, do kiến thức Toán học có cấu trúc kế thừa, muốn hiểu cái sau thì phải nắm được cái trước, và càng về sau thì nó càng trừu tượng và phức tạp. Đã quên một cái thì rất khó để tiếp tục học tiếp cái mới (nếu không quay lại học nhắc lại cái cũ).
Một phần nữa là Toán học nói chung luôn rất khó (nó là kiến thức đúc kết từ những trí tuệ tốt nhất của con người trong hàng trăm năm).
 
If I picked a difficult, prestigious field of study and studied at a prestigious institution, I probably would jerk myself raw too.
 
Cái này không biết bác hỏi ai, nhưng em tin là đoạn "though I think... should imply that" họ nói không đúng.

Em có thể chỉ ra phản ví dụ cho một dãy các tập A_n với độ đo hội tụ về 0, và tổng vô hạn các độ đo của A_{n+1} \ A_{n} nhỏ hơn vô hạn, nhưng tổng độ đo của A_n vẫn là vô hạn. Cụ thể như sau:
- lấy độ đo của A_n = n^{-0.8} (số 0.8 không quan trọng, có thể lấy số bất kỳ nhỏ hơn 1),
- chỉnh sao cho độ đo của A_{n+1} \ A_{n} cỡ 2^{-n} (việc chỉnh này tương đối dễ dàng vì chẳng có ràng buộc gì).

Lúc đó độ đo A_n tiến đến 0, tổng độ đo của A_{n+1} \ A_{n} tiến đến 1. Nhưng tổng độ đo của A_{n} tiến đến vô hạn (tính chất của chuỗi Riemann).
 
LC 1549
Java:
class Solution {
    public boolean areSentencesSimilar(String s1, String s2) {
        if (s1 == s2 || s1.equals(s2)) return true;
        return s1.length() < s2.length() ? isSimilar(s1, s2) : isSimilar(s2, s1);
    }
    static boolean isSimilar(String s1, String s2) {
        String[] a1 = s1.split(" "), a2 = s2.split(" ");
        int l1 = -1, l2 = -1;
        while (++l1 < a1.length && ++l2 < a2.length) if (!a1[l1].equals(a2[l2])) break;
        if (l1 == a1.length) return true;
        int r1 = a1.length - 1, r2 = a2.length - 1;
        while (r1 >= l1 && r2 >= l2) if (!a2[r2--].equals(a1[r1--])) return false;
        return r1 < l1;
    }
}
 
Python:
class Solution:
    # 2 pointers, if L_short == R_short => similar
    # len(s1) > len(s2)
    def _areSentencesSimilar(self, s1, s2):
        l2, r2 = 0, len(s2) - 1
        l1, r1 = 0, len(s1) - 1

        while l2 <= r2:
            if s2[l2] != s1[l1] and s2[r2] != s1[r1]:
                return False
            elif s2[l2] == s1[l1]:
                l1, l2 = l1 + 1, l2 + 1
            elif s2[r2] == s1[r1]:
                r1, r2 = r1 - 1, r2 - 1
            elif s2[l2] != s1[l1]:
                r1, r2 = r1 - 1, r2 - 1
            elif s2[r2] != s1[r1]:
                l1, l2 = l1 + 1, l2 + 1

        return True

    def areSentencesSimilar(self, sentence1: str, sentence2: str) -> bool:
        s1 = sentence1.split(" ")
        s2 = sentence2.split(" ")
       
        if len(s1) > len(s2):
            return self._areSentencesSimilar(s1, s2)
        else:
            return self._areSentencesSimilar(s2, s1)
 
Python:
class Solution:
    def minLength(self, s: str) -> int:
        stack = []
        n = len(s)
        for char in s:
            if stack and char == "B" and stack[-1] == "A":
                stack.pop()
                n-=2
            elif stack and char == "D" and stack[-1] == "C":
                stack.pop()
                n-=2
            else:
                stack.append(char)

        return n
 
Python:
class Solution:
    def minLength(self, s: str) -> int:
        charStack = []
        for c in s:
            if charStack and ((charStack[-1] == 'A' and c == 'B') or (charStack[-1] == 'C' and c == 'D')):
                charStack.pop()
            else:
                charStack.append(c)

        return len(charStack)
 
C++:
class Solution {
public:
    int minLength(string s) {
        stack<char> st;
        for(int i = 0; i < s.length(); i++) {
            if(!st.empty() && ( st.top() == 'A' && s[i] == 'B' ||  st.top() == 'C' && s[i] == 'D')) {
                st.pop();
            }
            else {
                st.push(s[i]);
            }
        }
        return st.size();
    }
};
 
Giống bài ngoặc nhọn
JavaScript:
function minLength(s: string): number {
    const st: string[] = [];
    for (let i = 0; i < s.length; i++) {
        if(!st.length) {
            st.push(s[i]);
            continue;
        }
        if (s[i] === 'B' && st[st.length - 1]  === 'A') st.pop();
        else if (s[i] === 'D' && st[st.length - 1] === 'C') st.pop();
        else st.push(s[i])
    }
    return st.length;
};
 
Java:
class Solution {
    public int minLength(String s) {
        Stack<Character> stack = new Stack<>();

        for (char c: s.toCharArray()) {
            if (!stack.isEmpty() && ((c == 'B' && stack.peek() == 'A') || (c == 'D' && stack.peek() == 'C'))) {
                stack.pop();
            } else {
                stack.push(c);
            }
        }

        return stack.size();
    }
}
 
quay lại đường đua
Python:
class Solution:
    def minLength(self, s: str) -> int:
        stack = []
        for c in s:
            if len(stack):
                t = stack[-1]
                if t == 'A' and c == 'B':
                    stack.pop()
                    continue
                if t == 'C' and c == 'D':
                    stack.pop()
                    continue
            stack.append(c)
        return len(stack)
 
Java:
public int minLength(String s) {
    int i;
    StringBuilder builder = new StringBuilder(s);
    while ((i = builder.indexOf("AB")) != -1 || (i = builder.indexOf("CD")) != -1) {
        builder.delete(i, i + 2);
    }
    return builder.length();
}
 
Trạng thái
Không mở để trả lời thêm.

Thống kê chủ đề

Ngày tạo
_Gia_Cat_Luong_,
Người trả lời cuối
Vipluckystar,
Trả lời
17.755
Lượt xem
1.214.510
Quay lại
Lên đầu trang