Trang chủ Tin Học Lớp 9 Xâu palindrome là xâu đọc từ trái sang phải cũng...

Xâu palindrome là xâu đọc từ trái sang phải cũng giống như đọc từ phải sang trái, ví dụ xâu 'madam'. Từ một xâu người ta có thể tạo ra xâu mới bằng cách đẩy vò

Câu hỏi :

Xâu palindrome là xâu đọc từ trái sang phải cũng giống như đọc từ phải sang trái, ví dụ
xâu 'madam'. Từ một xâu người ta có thể tạo ra xâu mới bằng cách đẩy vòng một số lần: đưa kí
tự cuối xâu về đầu xâu. Ví dụ, xâu 'array', bằng cách đẩy vòng ta có thể nhận được các xâu:
'array'→'yarra'→'ayarr'→'rayar'→'rrayaTrong số các xâu nhận được có xâu 'rayar' là xâu Palindrome. Trong trường hợp này người ta nói 'array' là một xâu palindrome vòng. Bản thân xâu palindrome cũng là một xấu palindrome vòng ví dụ như xâu 'aabaa' (có số lần biến đổi bằng 0).
Yêu cầu: cho xâu S bao gồm các kí tự in thường 'a'..'z' kiểm tra xem 5 có phải xâu palindrome vòng hay không?
Dữ liệu tệp văn bản PALIN.INP có cấu trúc sau:
• Dòng 1 ghi số 7 (T≤ 10);
• 7 dòng tiếp theo mỗi dòng ghi xâu S.
Kết quả ghi vào tệp PALIN.OUT gồm có 7 dòng mỗi dòng ghi YES nếu 5 là xâu palindrome vòng, ngược lại ghi NO.
Ràng buộc:
• 30% tests tương ứng 30% số điểm của bài có T = 1, độ dài xâu 5 không quá 10 kí tự, 50% tests khác tương ứng 50% số điểm của bài độ dài xâu 5 không quá 255 kí tự, 20% tests còn lại tương ứng 20% số điểm của bài độ dài xâu 5 không quá 1000 kí tự.
(Viết chương trình C++ giúp mình với mình cần gấp bây giờ, mình cảm ơn)

Lời giải 1 :

#include <bits/stdc++.h>
using namespace std;
void solve(){
	string s;
	cin>>s;
	int cnt[28];
	memset(cnt,0,sizeof(cnt));
	for(int i=0;i<s.size();i++){
		cnt[int(s[i]-'a')]++;
	}
	bool have1=false;
	for(int i=0;i<=26;i++){
		if(cnt[i]%2==0){
			continue;
		}
		else{
			if(have1==false){
				have1=true;
				continue;
			}
			else{
				cout<<"NO\n";
				return;
			}
		}
	}
	cout<<"YES\n";
	return;
}
int main(){
	freopen("PALIN.INP","r",stdin);
	freopen("PALIN.OUT","w",stdout);
	ios_base::sync_with_stdio(0);
	cin.tie(0);
	int t;
	cin>>t;
	while(t--){
		solve();
	}
	return 0;
}

Đáp án:

 

Giải thích các bước giải:

 

Lời giải 2 :

#include <bits/stdc++.h>
using namespace std;
int tt;
string s;
bool check (string s)
{
    string r = s;
    reverse(r . begin(), r . end());
    return r == s;
}
bool dx (string s)
{
    for(int i=0;i<s.size();++i)
    {
        rotate(s.begin(),s.begin()+1,s.end());
        if(check(s)) return true;
    }
    return false;
}
int main()
{
   cin>>tt;
   while (tt--)
   {
       cin>>s;
       cout<<(dx(s)?"YES":"NO")<<'\n';
   }
}

Bạn có biết?

Tin học là một ngành khoa học chuyên nghiên cứu quá trình tự động hóa việc tổ chức, lưu trữ, xử lý và truyền dẫn thông tin của một hệ thống máy tính cụ thể hoặc trừu tượng. Tin học bao hàm tất cả các nghiên cứu và kỹ thuật có liên quan đến việc mô phỏng, biến đổi và tái tạo thông tin. Hãy tận dụng sức mạnh của tin học để giải quyết các vấn đề và sáng tạo ra những giải pháp mới!

Nguồn :

Wikipedia - Bách khoa toàn thư

Tâm sự lớp 9

Lớp 9 - Là năm cuối ở cấp trung học cơ sở, chúng ta sắp phải bước vào một kỳ thi căng thẳng và sắp chia tay bạn bè, thầy cô. Áp lực từ kỳ vọng của phụ huynh và tương lai lên cấp 3 thật là lớn, nhưng hãy tin vào bản thân và giữ vững sự tự tin!

Nguồn :

sưu tập

Liên hệ hợp tác hoặc quảng cáo: gmail

Điều khoản dịch vụ

Copyright © 2021 HOCTAPSGK