[编程题] 回文串
给定一个字符串,问是否能通过添加一个字母将其变为回文串。
输入描述:
一行一个由小写字母构成的字符串,字符串长度小于等于10。
输出描述:
输出答案(YES\NO).
输入例子:
coco
输出例子:
YES
如果可以添加一个字母成为回文串,那么原字符串或者除去头部的字符串或者除去尾部的字符串一定是回文串!
// ConsoleApplication1.cpp : 定义控制台应用程序的入口点。
//
#include"stdafx.h"
//#include <string>
//#include <iostream>
//#include <algorithm>
//
//using namespace::std;
//
//
//bool isTrue(string str) {
// string revStr = str;
// reverse(revStr.begin(), revStr.end());
//
// return str == revStr;
//}
//
//int main() {
// string input;
//
// while (cin >> input) {
//
// bool flag = false;
//
// string str1(input.begin() + 1, input.end());
// string str2(input.begin(), input.end() - 1);
//
// if (isTrue(input) || isTrue(str1) || isTrue(str2)) {
// flag = true;
// }
//
// string result = flag == true ? "YES" : "NO";
// cout << result << endl;
// }
// return 0;
//}
#include <string>
#include <iostream>
#include <algorithm>
using namespace::std;
bool isTrue(string str) {
string revStr = str;
reverse(revStr.begin(), revStr.end());
return str == revStr;
}
int main() {
string input;
while (cin >> input) {
bool flag = false;
string::iterator iter = input.begin();
for (; iter != input.end(); ++iter) {
input.erase(iter);
if (isTrue(input)) {
flag = true;
break;
}
}
string result = flag == true ? "YES" : "NO";
cout << result << endl;
}
return 0;
}
第一次做的答案是有问题的,第二次才对!
#include <string>
#include <iostream>
#include <algorithm>
using namespace::std ;
bool isTrue(string str, int cur) {
string::iterator iter = str.begin();
for (int i = 0; iter != str.end(); ++iter, ++ i ) {
if (i == cur) {
str.erase(iter);
break;
}
}
string reverse_str = str;
reverse(reverse_str.begin(), reverse_str.end());
if (reverse_str == str) {
return true;
}
else return false;
}
int main() {
string input ;
while ( cin >> input ) {
if ( input.empty() == true ) continue ;
bool flag = false ;
for ( int i = 0; i < input.size(); ++ i ) {
if ( isTrue( input, i ) ) {
flag = true ;
break ;
}
}
string result = flag == true ? "YES" : "NO" ;
cout << result << endl ;
}
return 0 ;
}