01/10/2018, 08:17

[Codefights]Nhờ các bạn gop ý thuật toán bài ReverseParentheses

Không biết sai trường hợp nào nhỉ .


Code Java (SOLVED):

String reverseParentheses(String s) {
         while(s.indexOf("(") != (-1)){
            int end = s.indexOf(")");
            int begin = s.substring(0, end+1).lastIndexOf("(");
            String t = reverse(s.substring(begin + 1, end));
            s = s.substring(0,begin) + t + s.substring(end+1,s.length());
        }
        return s;
}
public static String reverse(String s){
    return new StringBuffer(s).reverse().toString();
}
*grab popcorn* viết 10:24 ngày 01/10/2018

Không biết sai trường hợp nào nhỉ .

Trường hợp này:

a((ac)(ab))

Nôm na là có vài cặp () đồng cấp nhau như trên là tạch.

Ideone.com

Ideone.com

Ideone is something more than a pastebin; it's an online compiler and debugging tool which allows to compile and run code online in more than 40 programming languages.

Quoc Tran viết 10:32 ngày 01/10/2018

thế phải dùng stack à bác?

*grab popcorn* viết 10:33 ngày 01/10/2018

Mình cũng nghĩ tới hướng dùng stack
Nhưng đang nghiệm cách khác xem đc ko.

Đỗ Trung Quân viết 10:34 ngày 01/10/2018

Kiểm tra xem có 2 hoặc nhiều ngoặc sát nhau không. Có thì đảo ngược từ trong ra ngoài

Code Đại Hiệp viết 10:24 ngày 01/10/2018

Cách dễ nhất là duyệt chuỗi từ trái sang phải hễ cứ gặp “)” thì đảo chuỗi trước nó tính đến “(” gần nó nhất rồi lại duyệt lại cả chuỗi từ đầu. Có ai có cách nào khác không

Nguyễn Duy Hùng viết 10:21 ngày 01/10/2018

@.@ đã sửa code lại cho bao cái trường hợp đó nhưng mà vẫn fail

Khoa NTA viết 10:32 ngày 01/10/2018

Mình cũng thử làm. Vì chưa học Java nên không viết bằng Java được, tuy mình viết bằng Python nhưng hơi dài :3 Trình còn kém. Mình lấy ý tưởng là thuật toán Reverse Polish Notation, bạn có dùng thì thay tên hàm rp_process thành reverseParentheses là được :3
http://ideone.com/5k7mAd (có sửa lại tí cho nó đúng với mấy cái case )

*grab popcorn* viết 10:29 ngày 01/10/2018

Ko rõ th này có tính là 1 case hay ko. Nhưng cho 1 dấu mở mà ko dấu đóng thì bị quăng exception.
(a(bc)d)(ef)(

Nguyễn Duy Hùng viết 10:26 ngày 01/10/2018

ok cảm ơn nhiều nhé để tham khảo

Nguyễn Duy Hùng viết 10:27 ngày 01/10/2018

Cái đề nó đã đảm bảo là chuỗi nằm trong một ngoặc hợp lệ rồi tức là có mở có đóng ấy, câu cuối. Sau một hổi kiểm tra lại đề thì thấy là thuật toán của mình đã thay hết các ký tự space của chuỗi s ban đầu đã fix được rồi. Cảm ơn mọi người.

Bài liên quan
0