牛客网 | 计算字符个数

题目描述

写出一个程序,接受一个有字母和数字以及空格组成的字符串,和一个字符,然后输出输入字符串中含有该字符的个数。不区分大小写。 
输入描述:
输入一个有字母和数字以及空格组成的字符串,和一个字符。


输出描述:
输出输入字符串中含有该字符的个数。

输入例子:
ABCDEF 
A
输出例子:
1

import java.util.Scanner;

public class Main {
    public static void main(String[] args)
    {
        int count = 0;
        Scanner sc=new Scanner(System.in);
        String string = sc.nextLine();
        String sub = sc.nextLine();
        char a = sub.charAt(sub.length()-1);
        for(int i=0;i<string.length();i++)
        {
            if(string.charAt(i)==a)
                count++;
        }
        System.out.println(count);
    }

}

### 关于AC自动机的知识点 AC自动机是一种用于多模式串匹配的有效算法,基于Trie树和KMP算法的思想构建。它能够高效地在一个文本中查找多个模式串是否存在。其核心在于利用失败指针优化搜索过程,在某个字符不匹配时快速跳转到可能的子状态继续匹配。 #### 构建AC自动机的核心步骤 1. **建立 Trie 树**:将所有的模式串插入到一棵前缀树(Trie)中。 2. **构造失败指针**:类似于 KMP 的 next 数组,通过广度优先遍历的方式为每个节点置失败指针,指向最长可匹配的前缀。 3. **执行匹配**:在给定的文本上沿着 Trie 和失败指针移动,记录所有匹配的结果[^1]。 以下是 Python 实现的一个简单版本: ```python from collections import deque, defaultdict class ACAutomaton: def __init__(self): self.trie = {} self.fail = [] self.output = [] def insert(self, word): node = self.trie for char in word: if char not in node: node[char] = {} node = node[char] node['#'] = True # 表示单词结束 def build_fail(self): queue = deque() self.fail.append(None) # root 节点 fail 指向 None for key in self.trie.keys(): if key != '#': self.fail.append(0) queue.append((key, 1)) while queue: current_char, depth = queue.popleft() current_node = self.trie[current_char] for child_key in current_node.keys(): if child_key == '#': continue child_node = current_node[child_key] state = self.fail[depth] while state is not None and child_key not in self.trie[state]: state = self.fail[state] if state is None or child_key not in self.trie[state]: self.fail.append(0) else: self.fail.append(state + 1) queue.append((child_key, depth + 1)) def search(self, text): result = [] current_state = 0 for i, char in enumerate(text): while current_state is not None and char not in self.trie.get(current_state, {}): current_state = self.fail[current_state] if current_state is None: current_state = 0 continue current_state += 1 temp = current_state - 1 node = self.trie matched_word = "" while temp >= 0: matched_word = list(node.keys())[list(node.values()).index(temp)] + matched_word if '#' in node[temp]: result.append(matched_word) temp -= 1 node = self.trie[node[temp]] return result ``` --- ### 数数问题解析 数数问题是竞赛中的常见类型之一,通常涉及统计某些特定条件下满足约束的数量。例如,“天干地支”问题可以通过模拟计算来解决年份与干支之间的映射关系。 假我们需要编写一个程序来判断某一年对应的天干地支组合,可以按照如下方法实现: 1. 定义两个数组分别存储天干和地支。 2. 使用模运算找到对应位置上的天干和地支。 代码示例如下: ```python def year_to_gan_zhi(year): gan = ['甲', '乙', '丙', '丁', '戊', '己', '庚', '辛', '壬', '癸'] zhi = ['子', '丑', '寅', '卯', '辰', '巳', '午', '未', '申', '酉', '戌', '亥'] base_year = 1984 # 基准年份,该年为甲子年 offset = (year - base_year) % 60 gan_index = offset % 10 zhi_index = offset % 12 return f"{gan[gan_index]}{zhi[zhi_index]}" ``` 调用 `year_to_gan_zhi` 函数即可得到任意年份对应的天干地支组合。 --- ### 问题
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值