C++字符串长度获取函数以及其区别:
(C/C++ strlen(str)和str.length()和str.size()都可以求字符串长度。
其中str.length()和str.size()是用于求string类对象的成员函数 strlen(str)是用于求字符数组的长度,其参数是char*。)
Probelm:
给你一个仅由小写字母组成的字符串。你的任务是找出一个位置,删掉那个字母之后,字符串变成回文的。总会有一个合法的解。如果给定的字符串是一个回文串,那么-1也将被当作其中一个合法的解。
输入格式
第一行包含T,测试数据的组数。
后面跟有T行,每行包含一个字符串。
输出格式
如果可以删去一个字母使它变成回文串,则输出任意一个满足条件的删去字母的位置(下标从0开始)。例如:
bcbc
我们可以删掉位置0的b字符,或者位置3的c字符。两个答案都是正确的。
约束条件
1 ≤ T ≤ 20
1 ≤ 字符串的长度 ≤ 100005 所有字符都是小写字母
输入样例 #00
3
aaab
baa
aaa
输出样例 #00
3
0
-1
解释
在给定的输入中,T =3 +对于输入aaab,我们可以发现删掉字母b可以使得原串变为回文串,因此输出位置3。
+对于输入baa,我们可以发现删掉字母b可以使得原串变为
回文串,因此输出位置0。 +对于输入aaa,我们发现它已经是回文串了,所以输出-1。
#include <bits/stdc++.h>
using namespace std;
bool palindrome(string s,int first,int last){
while(first<last){
if(s[first] == s[last])
{
first++;
last--;
}else{
break;
}
}
if(first >= last){
return true;
}
else
return false;
}
int palindromeIndex(string s){
// Complete this function
int len = s.length() ;
int resultIndex = -1;
int firstIndex = 0;
int lastIndex = len-1;
while(firstIndex < lastIndex){
if(s[firstIndex] == s[lastIndex]){
firstIndex++;
lastIndex--;
}
else{
break;
}
}
if(firstIndex >= lastIndex){
resultIndex = -1;
}
else{
if(palindrome(s,firstIndex+1,lastIndex))
{
resultIndex = firstIndex;
}
else if(palindrome(s,firstIndex,lastIndex-1))
{
resultIndex = lastIndex;
}
}
return resultIndex;
}
int main() {
int q;
cin >> q;
for(int a0 = 0; a0 < q; a0++){
string s;
cin >> s;
int result = palindromeIndex(s);
cout << result << endl;
}
return 0;
}