数组字符串系列之:判断两个字符串是否是变位词

/*判断两个字符串是否是变位词。变位词:指组成两个词的字符相同,只是位置不同*/
//方法1、对两个字符串排序,如果是变位词则排序后相等,时间复杂度NlogN

//方法2、开辟一个256大小的整型数组来统计第一个词的每个字符出现的次数,扫描第一个词,相应字符出现的次数加一;扫描第二个词,相应字符出现的次数减一;如果最后数组256个全部为0,则为变位词。

C++实现

bool is_anagram(const string &s1,const string &s2)
{
	int count[256];
	memset(count,0,sizeof(count));
	int len1 = s1.length(), len2 = s2.length();

	if(len1==0 || len2==0 || len1!=len2)
		return false;
	else
	{
		for(int i=0;i<len1;i++)
		{
			++count[s1[i]];
			--count[s2[i]];
		}

		for(int j=0;j<256;j++)
		{
			if(count[j]!=0)
				return false;
		}
		return true;
	}
}

Python实现

def is_anagram(s1,s2):
	length1 = len(s1)
	length2 = len(s2)
	count = [0]*256
	if length1==0 or length2==0 or length1!=length2:
		return False
	else:
		for i in range(0,length1):
			++count[ord(s1[i])]
			--count[ord(s2[i])]
		for j in range(0,256):
			if count[j]!=0:
				return False
		return True

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值