leetcode算法题-有效字母的异位词-C++

一、题目说明

242. 有效的字母异位词 - 力扣(LeetCode) (leetcode-cn.com)

给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。
示例 1: 输入: s = “anagram”, t = “nagaram” 输出: true
示例 2: 输入: s = “rat”, t = “car” 输出: false
说明: 你可以假设字符串只包含小写字母。

二、思路及题解

1.思路:

​ 本题字符串只包含小写字母,所以可以创建一个大小为26的哈希表,记录字符串s,t中字符出现的次数,先遍历字符串s,在出现字符的位置上加1,再遍历字符串t,在出现字符的位置上-1,若遍历结束后哈希表为空,则表示两个字符串是字母异位词

s[i]-‘a’ 可以计算出字母相对于’a’的位置,并且不需要记住a的ASCII值

2.代码

class Solution{
public:
	bool isAnagram(string s, string t){
        int record[26] = {0};
        for (int i = 0; i < s.size(); i++){
            // 在元素对应位置+1
            record[s[i] - 'a']++;
        }
        for (int i = 0; i < t.size(); i++){
            // 在元素对应位置-1
            record[t[i] - 'a']--;
        }
        for (int i = 0; i < 26; i++){
            if (record[i] != 0){
                return false;
            }
        }
        return true;
	}
};

3.本地调试代码

#include <iostream>
using namespace std;

class Solution{
public:
	bool isAnagram(string s, string t){
        int record[26] = {0};
        for (int i = 0; i < s.size(); i++){
            record[s[i] - 'a']++;
        }
        for (int i = 0; i < t.size(); i++){
            record[t[i] - 'a']--;
        }
        for (int i = 0; i < 26; i++){
            if (record[i] != 0){
                return false;
            }
        }
        return true;
	}
};

int main(){
	string s;
	string t;
	cout << "请输入字符串s:";
	cin >> s;
	cout << "请输入字符串t:";
	cin >> t;
	Solution solution;
	bool b = solution.isAnagram(s, t);
	if (b){
		cout << "true" << endl;
	}
	else{
		cout << "false" << endl;
	}
    system("pause");
	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值