题目描述:
给定一个字符串,问是否能够通过添加一个字母,使其变为回文。
输入描述:
一行由小写字母构成的字符串,字符串长度小于等于10
输出描述:
YES/NO
例子:
coco
输出:
YES
分析:从微信公众号上看到的别人用Java的解题思路,即如果添加一个字符能变为回文串,那么删除对应位置上的字符,该字符串仍为回文。用一个循环,每次删掉一个字符,然后判断是否为回文,如果遍历完字符串,判断结果都为回文,输出YES,否则,输出NO。
代码如下:
bool isPalindrome(string s)
{
string temp = s;
reverse(s.begin(),s.end());
return (temp == s );
}
int main()
{
string input;
while(cin >> input)
{
if(input.size() == 0 || input.size() == 1)
cout << "YES" <<endl;
else
{
string s;
int n = input.size();
bool flag = false;
for(int i = 0;i < n;i++)
{
s = input.substr(0,i) + input.substr(i+1);
if(isPalindrome(s))
{
flag = true;
break;
}
}
if(flag)
cout << "YES" << endl;
else
cout << "NO" << endl;
}
}
substr有两种用法。
第一种 sub(i,j);表示取字符串从第i个字符起到第j个字符为止的子串
第二种 substr(i);只有一个参数,表示取字符串从第i个为止开始到字符串结尾的子串
//示例:
string s = "01234567";
string str1,str2;
str1 = s.substr(2);
str2 = s.substr(3,5);
// 则str1为“234567”
//str2为“345”