题目描述

游戏规则:输入一个只包含英文字母的字符串,字符串中的两个字母如果相邻且相同,就可以消除。

在字符串上反复执行消除的动作,直到无法继续消除为止,此时游戏结束。

输出最终得到的字符串长度。

输入描述

输入原始字符串 str ,只能包含大小写英文字母,字母的大小写敏感, str 长度不超过100。

输出描述

输出游戏结束后,最终得到的字符串长度。

备注

输入中包含 非大小写英文字母 时,均为异常输入,直接返回 0。

示例:

输入gg
输出0
说明gg 可以直接消除,得到空串,长度为0。
输入mMbccbc
输出3
说明在 mMbccbc 中,可以先消除 cc ;
此时字符串变成 mMbbc ,可以再消除 bb ;
此时字符串变成 mMc ,此时没有相邻且相同的字符1
,无法继续消除。
最终得到的字符串为 mMc ,长度为3。

c源码算法源码

#include <stdio.h>
#include <string.h>

// 获取结果函数
int get_result(char *s) {
    char stack[1000];
    int top = -1;

    for (int i = 0; i < strlen(s); i++) {
        char c = s[i];

        // 判断字符是否为字母
        if ((c < 'A' || c > 'z') || (c > 'Z' && c < 'a')) {
            return 0;
        }

        // 检查栈顶元素与当前字符是否相同
        if (top >= 0 && c == stack[top]) {
            top--;
        } else {
            top++;
            stack[top] = c;
        }
    }

    // 返回栈中剩余元素个数
    return top + 1;
}

// 主函数
int main() {
    char s[1000];
    scanf("%[^\n]s", s); // 读取输入字符串

    // 调用函数并打印结果
    printf("%d\n", get_result(s));

    return 0;
}

Python算法源码

def get_result(s):
    stack = []
  
    for c in s:
        if not c.isalpha():
            return 0
      
        if stack and c == stack[-1]:
            stack.pop()
        else:
            stack.append(c)
          
    return len(stack)

if __name__ == "__main__":
    s = input() # 输入字符串
  
    # 调用函数并打印结果
    print(get_result(s))

Java算法源码

import java.util.LinkedList;
import java.util.Scanner;

public class Main {
  public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);
    System.out.println(getResult(sc.nextLine()));
  }

  // 获取结果函数
  public static int getResult(String s) {
    LinkedList<Character> stack = new LinkedList<>();

    for (int i = 0; i < s.length(); i++) {
      char c = s.charAt(i);

      // 判断字符是否为字母
      if (c < 'A' || c > 'z' || (c > 'Z' && c < 'a')) return 0;

      // 检查栈顶元素与当前字符是否相同
      if (!stack.isEmpty() && c == stack.getLast()) stack.removeLast();
      else stack.addLast(c);
    }

    // 返回栈中剩余元素个数
    return stack.size();
  }
}
最后修改:2024 年 05 月 02 日
如果觉得我的文章对你有用,请随意赞赏