Bài toán kiểm tra chuỗi đối xứng

Em đã viết một hàm như vầy:

bool checkPalindrome(string inputString) {
    int len = inputString.length() - 1;
    if (len == 0) return true;
    for (int i = 0; i < len; i++) {
        if (inputString[i] != inputString[len]) {
            return false;
            break;
        } else {
            return true;
            len--;
        }
    }
}

Khi thử đến trường hợp “aaabaaaa” , “zzzazzazz” thì nó bị sai nên em không biết mình đã mắc lỗi chỗ nào mong mọi người chỉ em.

Sai là sai thế nào? Kết quả trả về mà em mong đợi là gì? Theo anh đoán kết quả trả về mà em mong đợi là false. Trong code, anh thấy có một lỗi rất lớn, ở đoạn này:

else 

    {

        return true; 

        len--;

    }

Khi gặp return rồi thì hàm tự thoát ra, trả về giá trị luôn nên dòng len-- bên dưới vô dụng và vòng lặp for sẽ bị dừng
=> Chỉ kiểm tra được kí tự đầu tiên. Muốn hết lỗi thì bỏ cái return true ra ngoài là xong.

5 Likes

Sai nhiều, sai gần như từng câu lệnh.

Vòng lặp thiếu 1 kí tự cuối.

Luôn so sánh kí tự tại i (từng kí tự) với một kí tự cố định tại ví trí len.

Bạn chỉ so sánh được kí tự đầu tiên, không phải cả chuỗi. Sai cả về quy tắc câu lệnh. Khi mà return trong 1 nhánh rồi thì không có thêm câu lệnh nào phía sau nó.

Xét lại thì sai gần hết, về thuật toán, quy tắc return, vòng lặp.

6 Likes

Dạ cho em hỏi chỗ vòng lặp thiếu một kí tự cuối là sao ạ?
Với lại dòng int len =inputString.length()-1; câu lệnh này sai j ạ?
Dạ phần return trong 1 nhánh là em quên, em đã sửa lại rồi !

Em đã test lại được rồi á! Em cảm ơn nhiều ( lâu lâu em quên mất return là thoát ra như break )

Phương thức .lenght() trả về độ dài của chuỗi. Giả sử chuỗi “abcd” có 4 kí tự thì nó sẽ trả về 4. Thế nhưng bạn lại gán:

len =inputString.length()-1;

Vậy thì len sẽ chỉ bằng 3. Đến khi bạn duyệt:

for (int i = 0; i < len; i++)

bạn chỉ cho i < 3 tức i nhận các giá trị {0; 1; 2}. Phần tử inputString[3] tức kí tự ‘d’ sẽ không được duyệt.

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