消消乐游戏
标题:消消乐游戏 | 时间限制:1秒 | 内存限制:65536K | 语言限制:不限
游戏规则:输入一个只包含英文字母的字符串,字符串中的两个字母如果相邻且相同,就可以消除。
在字符串上反复执行消除的动作,直到无法继续消除为止,此时游戏结束。
输出最终得到的字符串长度。
#include<string>
#include<iostream>
using namespace std;
int main(){
string str_inp;
cin >> str_inp;
int len = str_inp.length();
for(int index = 0;index < str_inp.length()-1;)
{
if(!(str_inp[index]>='a'
&&str_inp[index]<='z')
&&!(str_inp[index]>='A'
&&str_inp[index]<='Z'))
{
cout << 0;
return 0;
}
if(str_inp[index]==str_inp[index+1])
{
str_inp.erase(index, 2);
if(index!=0)
{
index = index - 1;
}
}
else{
index = index +1;
}
}
printf("%d" , str_inp.length());
return 0;
}
// 只拿95.4
while True: try: str_input = input() res = list(str_input) if str_input.isalpha(): i = 1 while True: if i >= len(res): break elif i > 0 and res[i] == res[i - 1]: res.pop(i) res.pop(i - 1) i -= 2 i += 1 print(len(res)) else: print(0) except: break // 满分
import java.util.Scanner;
import java.util.Stack;
public class Main {
public static int getRes(String str) {
Stack<Character> stack = new Stack<>();
for (int i = 0; i < str.length(); i++) {
char c = str.charAt(i);
if (!isValid(c)) {
return 0;
}
if ((!stack.empty()) && (stack.peek() == c)) {
stack.pop();
continue;
}
stack.push(c);
}
return stack.size();
}
private static boolean isValid(char c) {
if ((c >= 'a' && c <= 'z') || (c >= 'A') && (c <= 'Z')) {
return true;
}
return false;
}
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
String str = scan.nextLine();
int res = getRes(str);
scan.close();
System.out.println(res);
}
}

查看1道真题和解析