【数据结构】判别字符串中每个字符出现的次数是否相同

本文介绍了一种高效判断两个字符串是否为字母异位词的方法。通过使用长度为26的数组记录每个字母的出现次数,遍历第一个字符串时增加计数,遍历第二个字符串时减少计数,最终检查数组中所有元素是否为0来判断两个字符串是否包含相同的字母及相同的频率。

力扣连接:有效的字母异位词
解题思路:
设置一个数组,数组大小为26(因为字母表中的字母数为26,因此只需26个位置就能记录所有字母出现的次数),遍历第一个字符串时,当出现了对应的字母,就在数组的value值+‘1’,直到遍历完第一个字符串,遍历第二个字符串,当出现了对应的字母,就在数组的value值-‘1’。最后遍历一下当前数组,若有不为0的数组,说明两字符串中每个字符出现的次数不相同,否则则相同。
代码如下

class Solution {
    public boolean isAnagram(String s, String t) {
        int []a= new int[26];
        for(char c : s.toCharArray()){
            a[c-'a'] +=1; 
        }
        for(char c:t.toCharArray()){
            a[c-'a'] -= 1;
        }
        for(int i :a){
            if(i!=0) return false;
        }
       return true;
    }
}
为了判断一个表达式字符串中括号是否正确匹配,你可以使用栈的数据结构,遵循'先入后出'的原则来设计算法。具体步骤如下: 参考资源链接:[C++栈实现表达式括号匹配判别](https://wenku.youkuaiyun.com/doc/1kyhp5ogp4?spm=1055.2569.3001.10343) - 初始化一个空栈,用于存放左括号。 - 遍历表达式中的每个字符。 - 如果遇到左括号('(' 或 '['),则将其压入栈中。 - 如果遇到右括号(')' 或 ']'),检查栈是否为空。 - 如果栈为空,则表示没有对应的左括号,匹配失败。 - 如果栈为空,检查栈顶的左括号是否与当前右括号匹配(即'('与')'匹配,'['与']'匹配)。 - 如果匹配,则弹出栈顶元素继续遍历。 - 如果匹配,则直接返回匹配的结果。 - 遍历完成后,检查栈是否为空。 - 如果栈为空,表示所有的左括号都找到了对应的右括号,匹配成功。 - 如果栈为空,表示存在未匹配的左括号,匹配失败。 在编码实现时,可以定义一个顺序栈`SqStack`,使用`Push()`和`Pop()`方法分别进行入栈和出栈操作,并利用`switch`语句处理同类型的括号匹配情况。 通过这种方法,你可以确保在处理表达式时能够正确地判断括号的匹配情况。这一算法的关键在于正确地使用栈的特性,以及处理字符串和栈之间交互的逻辑。为了进一步理解这个算法的设计和实现,你可以参考《C++栈实现表达式括号匹配判别》这篇文档,它详细介绍了整个算法的设计思路和实现步骤,对于学习和应用栈在括号匹配问题中的使用非常有帮助。 参考资源链接:[C++栈实现表达式括号匹配判别](https://wenku.youkuaiyun.com/doc/1kyhp5ogp4?spm=1055.2569.3001.10343)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值