Một xâu kí tự được gọi là có tính chất đối xứng nếu viết từ trái sang phải
Vận dụng trang 20 Chuyên đề Tin học 12: Một xâu kí tự được gọi là có tính chất đối xứng nếu viết từ trái sang phải cũng giống như viết từ phải sang trái (không phân biệt chữ viết hoa và chữ viết thường). Ví dụ: “level”, “madam”, “mom”, “civic”, “Able was I ere I saw Elba" là những xấu có tính chất đối xứng. Em hãy thực hiện các yêu cầu sau:
a) Dựa trên cơ chế hoạt động vào trước ra trước của hàng đợi và vào sau ra trước của ngăn xếp, em hãy thiết kế thuật toán sử dụng một ngăn xếp và một hàng đợi để kiểm tra xem một xâu kí tự bất kì có tính chất đối xứng hay không.
b) Viết hàm doixang(s) thực hiện thuật toán xây dựng được ở câu a) để kiểm tra xem xâu s có tính chất đối xứng hay không.
c) Viết chương trình hoàn thiện, yêu cầu người sử dụng nhập vào một xâu kí tự, rồi gọi hàm doixung(s) đã viết được ở câu b) để kiểm tra xâu nhập vào có tính chất đối xứng hay không. Chạy chương trình với các xâu kí tự sau: “-123454321", "112", "racecar" và cho biết kết quả thu được.
Lời giải:
a) Dựa trên cơ chế hoạt động vào trước ra trước của hàng đợi và vào sau ra trước của ngăn xếp (stack), em thiết kế thuật toán sử dụng một ngăn xếp và một hàng đợi (queue), để kiểm tra xem một xâu kí tự bất kì có tính chất đối xứng hay không như sau:
- Chuyển xâu kí tự về cùng một định dạng (chữ thường) và loại bỏ các kí tự không phải chữ cái hoặc số để tránh các yếu tố không cần thiết.
- Đưa từng kí tự của xâu vào cả ngăn xếp và hàng đợi.
- Lần lượt lấy từng kí tự ra từ ngăn xếp và hàng đợi và so sánh chúng. Nếu tất cả các kí tự lấy ra đều giống nhau, thì xâu kí tự có tính chất đối xứng, ngược lại thì không.
b) Viết hàm doixang(s) thực hiện thuật toán xây dựng được ở câu a) để kiểm tra xem xâu s có tính chất đối xứng hay không như sau:
from collections import deque
def clean_string(s):
return ''.join(char.lower() for char in s if char.isalnum())
def doixung(s):
cleaned_s = clean_string(s)
stack = []
queue = deque()
for char in cleaned_s:
stack.append(char)
queue.append(char)
while stack:
if stack.pop() != queue.popleft():
return False
return True
c) Viết chương trình hoàn thiện yêu cầu người sử dụng nhập vào một xâu kí tự, rồi gọi hàm doixung(s) để kiểm tra xâu nhập vào có tính chất đối xứng hay không và chạy chương trình với các xâu kí tự đã cho:
def main():
strings_to_test = ["-123454321", "112", "racecar"]
for s in strings_to_test:
if doixung(s):
print(f"'{s}' có tính chất đối xứng.")
else:
print(f"'{s}' không có tính chất đối xứng.")
user_input = input("Nhập vào một xâu kí tự: ")
if doixung(user_input):
print(f"'{user_input}' có tính chất đối xứng.")
else:
print(f"'{user_input}' không có tính chất đối xứng.")
if __name__ == "__main__":
main()
Kết quả thu được như sau:
"-123454321": có tính chất đối xứng.
"112": không có tính chất đối xứng.
"racecar": có tính chất đối xứng.
Xem thêm lời giải bài tập Chuyên đề học tập Tin học 12 Cánh diều hay, chi tiết khác:
Xem thêm các tài liệu học tốt lớp 12 hay khác:
- Giải Chuyên đề Tin học 12 Kết nối tri thức
- Giải Chuyên đề Tin học 12 Chân trời sáng tạo
- Giải Chuyên đề Tin học 12 Cánh diều
- Giải lớp 12 Kết nối tri thức (các môn học)
- Giải lớp 12 Chân trời sáng tạo (các môn học)
- Giải lớp 12 Cánh diều (các môn học)
- Giải Tiếng Anh 12 Global Success
- Giải sgk Tiếng Anh 12 Smart World
- Giải sgk Tiếng Anh 12 Friends Global
- Lớp 12 Kết nối tri thức
- Soạn văn 12 (hay nhất) - KNTT
- Soạn văn 12 (ngắn nhất) - KNTT
- Giải sgk Toán 12 - KNTT
- Giải sgk Vật Lí 12 - KNTT
- Giải sgk Hóa học 12 - KNTT
- Giải sgk Sinh học 12 - KNTT
- Giải sgk Lịch Sử 12 - KNTT
- Giải sgk Địa Lí 12 - KNTT
- Giải sgk Giáo dục KTPL 12 - KNTT
- Giải sgk Tin học 12 - KNTT
- Giải sgk Công nghệ 12 - KNTT
- Giải sgk Hoạt động trải nghiệm 12 - KNTT
- Giải sgk Giáo dục quốc phòng 12 - KNTT
- Giải sgk Âm nhạc 12 - KNTT
- Giải sgk Mĩ thuật 12 - KNTT
- Lớp 12 Chân trời sáng tạo
- Soạn văn 12 (hay nhất) - CTST
- Soạn văn 12 (ngắn nhất) - CTST
- Giải sgk Toán 12 - CTST
- Giải sgk Vật Lí 12 - CTST
- Giải sgk Hóa học 12 - CTST
- Giải sgk Sinh học 12 - CTST
- Giải sgk Lịch Sử 12 - CTST
- Giải sgk Địa Lí 12 - CTST
- Giải sgk Giáo dục KTPL 12 - CTST
- Giải sgk Tin học 12 - CTST
- Giải sgk Hoạt động trải nghiệm 12 - CTST
- Giải sgk Âm nhạc 12 - CTST
- Lớp 12 Cánh diều
- Soạn văn 12 Cánh diều (hay nhất)
- Soạn văn 12 Cánh diều (ngắn nhất)
- Giải sgk Toán 12 Cánh diều
- Giải sgk Vật Lí 12 - Cánh diều
- Giải sgk Hóa học 12 - Cánh diều
- Giải sgk Sinh học 12 - Cánh diều
- Giải sgk Lịch Sử 12 - Cánh diều
- Giải sgk Địa Lí 12 - Cánh diều
- Giải sgk Giáo dục KTPL 12 - Cánh diều
- Giải sgk Tin học 12 - Cánh diều
- Giải sgk Công nghệ 12 - Cánh diều
- Giải sgk Hoạt động trải nghiệm 12 - Cánh diều
- Giải sgk Giáo dục quốc phòng 12 - Cánh diều
- Giải sgk Âm nhạc 12 - Cánh diều