

Cho một xâu SS gồm các ký tự tiếng Anh in thường. Một đoạn con của SS từ chỉ số LL đến RR (tức là SLSL+1…SRSLSL+1…SR) được gọi là xâu đối xứng nếu khi đọc xuôi và đọc ngược đều giống nhau. Ngược lại, nếu đọc xuôi và đọc ngược không giống nhau, thì đó là xâu không đối xứng.
Yêu cầu: Tìm độ dài của xâu không đối xứng dài nhất nằm trong xâu SS.
Dữ liệu vào
Dữ liệu ra
Giới hạn
Sample Input 1
mew
Sample Output 1
3
Sample Input 2
wuffuw
Sample Output 2
5
Sample Input 3
qqqqqqqq
Sample Output 3
0
Giải thích
Hãy luôn nhớ cảm ơn và vote 5*
nếu câu trả lời hữu ích nhé!
Ý tưởng:
- Nếu xâu S không phải là xâu đối xứng => kết quả là độ dài của xâu S
- Nếu xâu S là xâu đối xứng:
+ Nếu các kí tự đều giống nhau => kết quả = 0 vì không tồn tại cách nào thỏa mãn
+ Ngược lại thì kết quả = độ dài của xâu S - 1 vì xóa bất kì 1 kí tự (khác vị trí giữa nếu là xâu có độ dài lẻ) thì xâu đó sẽ hết đối xứng
Code C++:
#include <bits/stdc++.h>
#define int long long
using namespace std;
signed main()
{
ios_base::sync_with_stdio(false);
cin.tie(NULL), cout.tie(NULL);
string s;
cin >> s;
int n = s.size();
bool f = true;
for (int i = 1; i < n; i++)
if (s[i] != s[0])
{
f = false;
break;
}
if (f)
return cout << 0, 0;
f = true;
for (int i = 0; i < n; i++)
if (s[i] != s[n - 1 - i])
{
f = false;
break;
}
if (f)
cout << n - 1;
else
cout << n;
return 0;
}
Nếu không hiểu phần nào thì hỏi nhé mình sẽ trả lời và giải thích cụ thể hơn
Hãy giúp mọi người biết câu trả lời này thế nào?
![]()
\begin{array}{c} \color{#FFFFFFff}{F}\color{#D0E4FFff}{u}\color{#A4C8FFff}{r}\color{#78ACFFff}{i}\color{#4C90FFff}{n}\color{#2064FFff}{a} \color{#0040A4ff}{F}\color{#2064FFff}{o}\color{#4C90FFff}{r}\color{#78ACFFff}{c}\color{#A4C8FFff}{a}\color{#D0E4FFff}{l}\color{#FFFFFFff}{o}\color{#D0E4FFff}{s} \end{array}
/**
* author: furinaforcalos
* created: 21.05.2025
**/
#include <bits/stdc++.h>
#define hutao long long
using namespace std;
int main()
{
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
string s;
cin>>s;
hutao n=s.length();
bool check=true;
for(hutao i=1;i<n;i++)
{
if(s[i]!=s[0])
{
check=false;
break;
}
}
if(check)
{
cout<<0;
return 0;
}
bool ok=true;
for(hutao i=0;i<n/2;i++)
{
if(s[i]!=s[n-1-i])
{
ok=false;
break;
}
}
if(!ok)
{
cout<<n;
}
else
{
cout<<n-1;
}
}
Hãy giúp mọi người biết câu trả lời này thế nào?
![]()
Bảng tin
2
227
0
c.ơn b nhé
1726
6529
2587
=)) ê t nghi v kaiz ak