前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >LeetCode 320. 列举单词的全部缩写(回溯/位运算)

LeetCode 320. 列举单词的全部缩写(回溯/位运算)

作者头像
Michael阿明
发布2021-02-19 10:52:52
5270
发布2021-02-19 10:52:52
举报
文章被收录于专栏:Michael阿明学习之路

文章目录

1. 题目

请你写出一个能够举单词全部缩写的函数。

注意:输出的顺序并不重要。

代码语言:javascript
复制
示例:
输入: "word"
输出:
["word", "1ord", "w1rd", "wo1d", "wor1", "2rd", "w2d", 
"wo2", "1o1d", "1or1", "w1r1", "1o2", "2r1", "3d", "w3", "4"]

来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/generalized-abbreviation 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

2. 解题

2.1 回溯

代码语言:javascript
复制
class Solution {
	vector<string> ans;
	int n;
public:
    vector<string> generateAbbreviations(string word) {
    	string empty;
    	n = word.size();
    	dfs(word, empty, 0, 0);
    	return ans;
    }
    void dfs(string& word, string& cur, int tailnum, int i)
    {	//tailnum 表示尾部现在有多少个连续的缩写,i 表示遍历到哪了
    	if(i == n)
    	{
    		if(tailnum > 0)
    			cur += to_string(tailnum);
    		ans.push_back(cur);
    		return;
    	}
    	int curlen = cur.size();//记录当前长度
    	//当前的字符缩写
    	dfs(word, cur, tailnum+1, i+1);
    	cur.resize(curlen);//回溯,删除后面的字符
    	//不缩写,前面有数字的话需要加上
    	if(tailnum > 0)
    		cur += to_string(tailnum);
    	cur += word[i];//不缩写
    	dfs(word, cur, 0, i+1);//尾部缩写数量清0
    	cur.resize(curlen);//回溯
    }
};

72 ms 21.5 MB

2.2 位运算

代码语言:javascript
复制
class Solution {
public:
    vector<string> generateAbbreviations(string word) {
    	vector<string> ans;
    	int n = word.size(), i, j, k, zero;
    	for(i = 0; i < (1<<n); ++i)//每位字符两种状态,2进制
    	{
    		zero = 0;//0表示字符替换为缩写,记录连续的个数
    		k = 0;//遍历的word字符的位置
    		string w;
    		for(j = 0; j < n; ++j,++k)
    		{
    			if((i>>j)&1)//该位不替换
    			{
    				if(zero > 0)
    					w += to_string(zero);
    				w += word[k];
    				zero = 0;
    			}
    			else
    				zero++;
    		}
    		if(zero > 0)
    			w += to_string(zero);
    		ans.push_back(w);
    	}
    	return ans;
    }
};

132 ms 17.7 MB

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020/08/07 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 文章目录
  • 1. 题目
  • 2. 解题
    • 2.1 回溯
      • 2.2 位运算
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档