如何判断一个字符是否包含重复的字符

题目描述:

判断一个字符串是否包含字符串。

分析:

方法一:蛮力法:

  最简单的方法就是把这个字符串看作一个字符串数组,对该数组使用双循环进行遍历,即对每个字符,都将这个字符与后面所有的字符进行比较,如果能找到相同的字符,则说明字符串包含有重复的字符。

实现代码:

package lock;

public class T13 {
	public static boolean isDup(String str)
	{
		int len =str.length();
		int i;
		for(i=0;i<len;i++)
		{
			for(int j=i+1;j<len;j++)
			{
				if(str.charAt(j)==str.charAt(i))
					return true;
			}
		}
		return false;
	}

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		String str="never";
		boolean result=isDup(str);
		if(result)
			System.out.println(str+"中有重复字符");
		else
			System.out.println(str+"中没有重复的字符");

	}

}

程序的运行结果为:

在这里插入图片描述

算法性能分析:

  由于这种方法使用了双循环对字符数组进行遍历,因此,算法的时间复杂度为O(N^2)(其中,N是指的字符串的长度)。

方法二:空间转换时间

  在算法中经常会采用空间换时间的方法。由于常见的字符只有256个,可以假设这个题目涉及的字符串中不同的字符串最多为256个,那么可以申请一个大小为256的int类型数组来记录每个字符出现的次数,初始化都为0,那么把这个字符的编码作为数组的代表,在遍历字符数组时,如果这个字符出现的次数为0,那么把它置为1。如果为1,则说明这个字符串已经在前面出现过,因此字符串包含重复的字符串。采用这种方法止血药对数组进行一次遍历就可以。

实现代码:

package lock;

public class T14 {
	public static boolean isDup(String str)
	{
		int len=str.length();
		int[] flags=new int[8];  //只需要8个32位的int,8*32位=256位
		int i;
		for(i=0;i<8;i++)
			flags[i]=0;
		for(i=0;i<len;i++)
		{
			int index=(int)str.charAt(i)/32;
			int shift=(int)str.charAt(i)%32;
			if((flags[index]&(1<<shift))!=0)
				return true;
			flags[index]|=(1<<shift);
		}
		return false;
	}

	public static void main(String[] args) {
		String str="never";
		boolean result=isDup(str);
		if(result)
			System.out.println(str+"中有重复字符");
		else
			System.out.println(str+"中没有重复的字符");

	}

}

运行结果:

在这里插入图片描述

算法分析:

  由于这种方法对字符串进行了一次遍历,因此,算法的时间复杂度为O(N)。(其中,N是指的字符串的长度)。此外这种方法申请了8个额外的存储空间。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值