LeetCode之Valid Anagram (Java+C/C++)

题意:验证变位词
Given two strings s and t, write a function to determine if t is an anagram of s.

For example,
s = “anagram”, t = “nagaram”, return true.
s = “rat”, t = “car”, return false.

解题思路1:利用库函数对两字符串字符排序,然后对比排序后的字符串,看二者是否相等
Java代码:

public class Solution {
    public boolean isAnagram(String s, String t) {
        char[] sArr = s.toCharArray();
        char[] tArr = t.toCharArray();
        Arrays.sort(sArr);
        Arrays.sort(tArr);
        return String.valueOf(sArr).equals(String.valueOf(tArr));
    }
}

C++代码:

class Solution {
public:
    bool isAnagram(string s, string t) {
        sort(s.begin(), s.end());
        sort(t.begin(), t.end());
        return s == t;
    }
};

解题思路2:由于题目限定字符串只是小写字母,故可开辟一个长度为26的整型数组记录每个字母出现的次数,对于s中出现的字母则加一,对于t中出现的字母则减一,最后判断该整型数组每个元素是否等于0,不等于则立即返回false

C代码:

bool isAnagram(char* s, char* t) {
    int lenS = strlen(s);
    int lenT = strlen(t);
    int m[26] = {0};
    for(int i = 0; i < lenS; i++)
        m[s[i] - 'a'] += 1;
    for(int j = 0; j < lenT; j++) 
        if(--m[t[j] - 'a'] < 0)
            return false;
    for(int k = 0; k < 26; k++) 
        if(m[k] != 0)
            return false;
    return true;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值