您的当前位置:首页正文

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

2024-11-07 来源:个人技术集锦

一、题目说明

给定两个字符串 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;
}
显示全文