试写一个算法,判断依次读入的一个以@为结束符的字母序列,是否形如‘序列1&序列2’模式的字符串。其中序列1和序列2中都不含字符‘&’,且序列2是序列1的逆序列。例如,‘a+b&b+a’是属该模式的字符序列,而‘1+3&3-1’则不是。
时间: 2023-06-05 22:47:18 浏览: 151
算法如下:
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;
}
相关问题
试写一个算法,判断依次读入的一个以@为结束符的字母序列,是否为形如‘序列1&序列2’模式的字符序列。其中序列1和序列2中都不含字符‘&’,且序列2是序列1的逆序列。
我可以回答这个问题。可以使用栈来判断该字母序列是否为形如‘序列1#序列2@’的格式。具体实现方法是,依次读入每个字符,如果是字母,则将其入栈;如果是#号,则弹出栈顶元素,直到遇到@号为止。如果此时栈为空,则说明该字母序列符合要求,否则不符合要求。
用c++写一个算法题:试写一个算法,判断依次读入的一个以@为结束符的字母序列,是否为形如‘序列1&序列2’模式的字符序列。其中序列1和序列2中都不含字符‘&’,且序列2是序列1的逆序列。
我可以回答这个问题。这个算法题可以使用栈来解决。首先,我们可以定义一个栈,然后依次读入字母序列中的每个字符,如果是字母,则将其压入栈中;如果是@符号,则判断栈中是否有两个及以上的元素,如果有,则弹出栈顶的两个元素,如果弹出的两个元素都是大写字母,则继续执行,否则返回false。最后,如果栈中只剩下一个元素,且该元素是大写字母,则返回true,否则返回false。
阅读全文