php 判断字符串重复字符,php判断字符串是否重复

20a36bb78dfe3044870f2602af526fe9.png

PHP判断字符串是否有重复字符:

方法一、

1、将字符串转成字符数组

2、使用Arrays.sort(char[])对字符数组进行排序,然后,逐个遍历整个排序后的数组,如果不是最后一个字符,并且如果当前字符和其后面的字符相同,那么就直接返回false,否则继续遍历,如果所有的元素和其后面都不相同或者已经遍历到最后一个字符了,就认为是没有重复字符,即返回true

3、另外,对于null或者长度是0的字符串,没有重复字符,返回true

方法二、

创建哈希表,遍历字符串,如果哈希表中不包含该字符,就添加进去,如果包含,就返回false,如果没有重复的字符,那么最后返回true。

方法三、

上述两种方法均需要额外开辟空间,如果想不开辟空间,那么可以借助String.indexOf(char ch, int fromIndex),遍历字符串中的字符,遍历到倒数第二个字符即可。对每个字符,判断其后是否有重复的字符即可,如果有就返回false,如果没有重复的字符,那么返回true。

实现代码:public class Solution {

/*

* @param str: A string

* @return: a boolean

*/

public boolean isUnique(String str) {

// write your code here

/*

//思路一

//如果str是null,那么抛出异常

if(str == null){

throw new IllegalArgumentException("invalid parameters");

}

//如果str的长度是0或者1,那么没有重复字符,返回true

if(str.length() == 0 || str.length() == 1){

return true;

}

//将字符串转成字符数组

char[] ch = str.toCharArray();

//对数组进行排序

Arrays.sort(ch);

//遍历数组,看当前字符是否和后面字符相同,相同就返回false,否则返回true

for(int i = 0; i < ch.length-1; i++){

if(ch[i] == ch[i+1]){

return false;

}

}

return true;

*/

/*

//思路二

//如果str是null,那么抛出异常

if(str == null){

throw new IllegalArgumentException("invalid parameters");

}

//如果str的长度是0或者1,那么没有重复字符,返回true

if(str.length() == 0 || str.length() == 1){

return true;

}

//创建hash表,将字符串字符存到hash表中

HashSet hs = new HashSet();

for(int i = 0; i < str.length(); i++){

if(hs.contains(str.charAt(i))){

return false;//hash表中有相同的字符,那么说明有重复的字符

}

hs.add(str.charAt(i));

}

return true;

*/

//思路三

//如果str是null,那么抛出异常

if(str == null){

throw new IllegalArgumentException("invalid parameters");

}

//如果str的长度是0或者1,那么没有重复字符,返回true

if(str.length() == 0 || str.length() == 1){

return true;

}

//从前向后遍历字符串,对每个字符,调用String.indexOf()看其后面是否有相同的字符,如果有返回false,否则最后返回true

for(int i = 0; i < str.length()-1; i++){

if(str.indexOf(str.charAt(i), i+1) != -1){

return false;

}

}

return true;

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值