zoukankan      html  css  js  c++  java
  • Leetcode: Anagrams(颠倒字母而成的字)

    题目

    Given an array of strings, return all groups of strings that are anagrams.

    Note: All inputs will be in lower-case.

    思路

    1. 使用数组模拟哈希表, 数组下标0-25分别代表字符'a'-'z', a[0] 代表 'a' 在单词中出现的次数

    2. 排序, 只有相邻的单词才有可能是相同的

    3. 这么慢的方法没想到 176ms 就能通过

    总结

    1. word 起初没有对 char 数组初始化, 结果 VS 成功运行, 但 Leetcode 上却是 WA. VS 真是宠坏一批程序员

    代码

    class word {
    public:
    	word() {
    		memset(chars, 0, sizeof(chars));
    		index = 0;
    	}
    	int chars[26];
    	int index;
    	bool operator<(const word &ths) const {
    		for(int i = 0; i < 26; i ++) {
    			if(this->chars[i] != ths.chars[i]){
    				return this->chars[i] < ths.chars[i];
    			}
    		}
    		return this->index < ths.index;
    	}
    	bool operator==(const word &ths) const {
    		for(int i = 0; i < 26; i ++) {
    			if(this->chars[i] != ths.chars[i]) {
    				return false;
    			}
    		}
    		return true;
    	}
    };
    
    class Solution {
    public:
        vector<string> anagrams(vector<string> &strs) {
    		vector<word> record;
    		for(int i = 0; i < strs.size(); i ++) {
    			record.push_back(buildWord(strs[i], i));
    		}
    		sort(record.begin(), record.end());
    		vector<word> res;
    		bool flag = false;
    		for(int i = 1; i < record.size(); i ++) {
    			if(record[i] == record[i-1]) {
    				if(!flag) {
    					res.push_back(record[i-1]);
    					res.push_back(record[i]);
    					flag = true;
    				}else{
    					res.push_back(record[i]);
    				}
    			}else{
    				flag = false;
    			}
    		}
    		return decomposition(res, strs);
        }
    
    	word buildWord(const string &str, const int &index) {
    		word newword;
    		for(int i = 0; i < str.size(); i ++) {
    			newword.chars[str[i]-'a'] ++;
    		}
    		newword.index = index;
    		return newword;
    	}
    	vector<string> decomposition(vector<word> &vec, vector<string> &strs) {
    		vector<string> res;
    		for(int i = 0; i < vec.size(); i++) {
    			res.push_back(strs[vec[i].index]);
    		}
    		return res;
    	}
    };
    

      

  • 相关阅读:
    shell入门-cut命令
    shell入门-特殊符号
    shell入门-系统和用户的配置文件
    shell入门-变量
    shell入门-shell特性
    linux命令-yum工具详解
    linux命令-rpm查询包
    linux命令-rpm安装和卸载
    math 数学模块
    random 随机模块
  • 原文地址:https://www.cnblogs.com/xinsheng/p/3513950.html
Copyright © 2011-2022 走看看