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;
    }
};

 

转载于:https://www.cnblogs.com/yaoyudadudu/p/9241471.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是对 `df.groupby(group_by_column)[shift_column].shift(0)` 代码进行封装和注释的示例: ```python import pandas as pd def group_shift(df, group_by_column, shift_column): """ 对 DataFrame 进行分组操作,并且在分组条件下对指定列进行位移操作 :param df: DataFrame 数据集 :param group_by_column: 分组依据的列名 :param shift_column: 需要进行位移操作的列名 :return: 返回位移操作后的结果 """ # 使用 groupby 方法按照 group_by_column 列进行分组,并选择需要进行位移操作的列 shift_column # 在此基础上,使用 shift 方法进行位移操作,参数 0 表示不进行位移,返回原始数据 shifted = df.groupby(group_by_column)[shift_column].shift(0) # 返回位移操作后的结果 return shifted ``` 其中, - `pd`:Python 中的 Pandas 库,需要先导入 - `group_shift`:自定义的函数名,可以根据需要进行修改 - `df`:函数的第一个参数,表示需要进行分组和位移操作的 DataFrame 数据集 - `group_by_column`:函数的第二个参数,表示分组依据的列名,可以根据需要进行修改 - `shift_column`:函数的第三个参数,表示需要进行位移操作的列名,可以根据需要进行修改 - `shifted`:函数内部定义的变量名,表示进行位移操作后的结果 - `return shifted`:返回结果,即位移操作后的 DataFrame 数据集 该函数可以直接调用,使用以下代码进行示例: ```python # 创建示例数据集 data = {'group': ['A', 'A', 'B', 'B'], 'value': [1, 2, 3, 4]} df = pd.DataFrame(data) # 调用 group_shift 函数进行位移操作 shifted_df = group_shift(df, 'group', 'value') ``` 其中,`shifted_df` 是位移操作后的结果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值