程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> leetcode筆記:Anagrams

leetcode筆記:Anagrams

編輯:關於C++

一. 題目描述

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

Note: All inputs will be in lower-case.

二. 題目分析

Anagram(回文構詞法)是指打亂字母順序從而得到新的單詞,比如”dormitory” 打亂字母順序會變成”dirty room” ,”tea” 會變成”eat”。

回文構詞法有一個特點:單詞裡的字母的種類和數目沒有改變,只是改變了字母的排列順序。

因此,將幾個單詞按照字母順序排序後,若它們相等,則它們屬於同一組anagrams 。

三. 示例代碼

class Solution {
public:
    vector anagrams(vector &strs) {
        string s;
        map anagram;
        vector res;
        for (int i = 0; i < strs.size(); ++i) {
            s = strs[i];
            sort(s.begin(), s.end());
            if (anagram.find(s) == anagram.end()) {
                anagram[s] = i;
            } else {
                if (anagram[s] >= 0) {
                    res.push_back(strs[anagram[s]]);
                    anagram[s] = -1;
                }
                res.push_back(strs[i]);
            }
        }
        return res;
    }
};

四. 小結

這裡關鍵在於對題目的理解。本文中anagrams指只有字母排列順序不同的單詞,例如eat,ate,tea。這個問題就可以使用hash的方法來解決,也有很多種不同的hash方法。

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved