249. Group Shifted Strings

Posted yaoyudadudu

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了249. Group Shifted Strings相关的知识,希望对你有一定的参考价值。

问题描述:

Given a string, we can "shift" each of its letter to its successive letter, for example: "abc" -> "bcd". We can keep "shifting" which forms the sequence:

"abc" -> "bcd" -> ... -> "xyz"

Given a list of strings which contains only lowercase alphabets, group all strings that belong to the same shifting sequence.

Example:

Input: ["abc", "bcd", "acef", "xyz", "az", "ba", "a", "z"],
Output: 
[
  ["abc","bcd","xyz"],
  ["az","ba"],
  ["acef"],
  ["a","z"]
]

 

解题思路:

使用visited函数来判断该字符串是否已经被访问并且加入到某一个组内。

若加入则跳过

若未加入,则判断或寻找它的组员

需要注意的是:

在判断是否可以通过偏移来获得另一个字符串时,注意当被减数大于减数时如何判断:

 s1[i] - ‘a‘ + (‘z‘ - s2[i]) +1;

 

代码:

class Solution {
public:
    vector<vector<string>> groupStrings(vector<string>& strings) {
        vector<bool> visited(strings.size(), false);
        vector<vector<string>> ret;
        for(int i = 0; i < strings.size(); i++){
            if(visited[i]) continue;
            visited[i] = true;
            vector<string> cur;
            cur.push_back(strings[i]);
            for(int j = i+1; j < strings.size(); j++){
                if(visited[j]) continue;
                if(canShift(strings[i], strings[j])){
                    cur.push_back(strings[j]);
                    visited[j] = true;
                }
            }
            ret.push_back(cur);
        }        
        return ret;
    }
private: 
    bool canShift(string s1, string s2){
        if(s1.size() != s2.size()){
            return false;
        }
        if(s1.size() == 1)
            return true;
        int diff = s1[0] >= s2[0] ? s1[0] - s2[0] : s1[0] - a + (z - s2[0]) + 1;
        for(int i = 1; i < s1.size(); i++){
            int curdiff = s1[i] >= s2[i] ? s1[i] - s2[i] : s1[i] - a + (z - s2[i]) +1;
            if(curdiff != diff)
                return false;
        }
        return true;
    }
};

 

以上是关于249. Group Shifted Strings的主要内容,如果未能解决你的问题,请参考以下文章

java 249. Group Shifted Strings.java

java 249. Group Shifted Strings.java

java 249. Group Shifted Strings.java

java 249. Group Shifted Strings.java

java 249. Group Shifted Strings.java

249. Group Shifted Strings