试写一个算法,判断依次读入的一个以@为结束符的字母序列,是否形如‘序列1&序列2’模式的字符串。其中序列1和序列2中都不含字符‘&’,且序列2是序列1的逆序列。例如,‘a+b&b+a’是属该模式的字符序列,而‘1+3&3-1’则不是。
时间: 2023-06-05 22:47:18 浏览: 147
aba.rar_ABA_判断以@为结束符的字符串是否_回文序列
算法如下:
1. 读入以@为结束符的字母序列,存储在字符串s中。
2. 找到字符串s中的‘&’字符,将其位置记为pos。
3. 判断pos是否为0或者s的末尾位置,若是,则返回false。
4. 将字符串s分为两个子串s1和s2,分别为s的开头到pos-1和pos+1到末尾。
5. 判断s1和s2是否相等且不含‘&’字符,若不是,则返回false。
6. 将s1反转得到s1_rev。
7. 判断s1_rev是否等于s2,若是,则返回true,否则返回false。
完整代码如下:
bool isPattern(string s) {
int pos = s.find('&');
if (pos == 0 || pos == s.length() - 1) {
return false;
}
string s1 = s.substr(0, pos);
string s2 = s.substr(pos + 1);
if (s1 == s2 || s1.find('&') != string::npos || s2.find('&') != string::npos) {
return false;
}
string s1_rev(s1.rbegin(), s1.rend());
return s1_rev == s2;
}
阅读全文