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; }