判断字符串是否含有重复字符共有几种不同的方法
方法一:
思 路:
String string = "helloworld"
1.将字符串转换成字符数组, char[ ]arr = string.toCharArray( );
2.从字符串第一个字符开始遍历,
通过判断当前字符第一次出现的下标,是否等于最后一次出现的下标,来判断字符是否重复。
利用String方法 indexOf( )和lastIndexOf( )
实现代码:
public class Test{
public static void main(String[]args){
/**
* 判断字符串是否含有重复字符:
* 1.首先将字符串转成字符数组
* 2.利用 indexof 与 lastindexof 判断字符是否重复
*/
String string = "helloworld";
char[]arr = string.toCharArray();
for(char ch:arr) {
if (string.indexOf(ch) != string.lastIndexOf(ch)) {
System.out.println("字符串含有重复字符");
break;
}
}
}
}
方法二: 位运算: >>右移运算符,二进制位全部右移若干位 多余则舍弃右边位数 <<左移运算符,二进制位全部左移若干位 不足则补0 假设要判断的字符串全部由小写英文字母组成 我们以二进制的第 i 位 1或0 表示,第 i 个字母 存在或不存在,1001 第0位和第3位为1,表示字符 a 和 d 存在 用num表示字符串字符是否出现过的二进制位,num首先赋值为0,用ch表示字符串某个字符, 若(num>>(ch-'a'))&1==1,则表示ch字符出现过,则break 若ch没有出现过,num与1做与运算,并左移ch-'a'位,(num|1)<<ch-'a' 实现代码:
package java_sort;
import java.util.*;
public class Main{
public static void main(String[] args) {//用位运算判断 string字符串是否含有重复字符
ArrayList<String> arr =new ArrayList<String>();
arr.add("hello");
arr.add("fczvagh");
arr.add("fdfd");
/**
* 由于构成可行解的字符串仅包含小写字母,且无重复元素,
* 我们可以用一个二进制数来表示该字符串的字符集合,
* 二进制的第 ii 位为 11 表示字符集合中含有第 ii 个小写字母,
* 为 00 表示字符集合中不含有第 ii 个小写字母。
*
*/
for(String str:arr){
String string=str;
int mask=0;
for(int i=0;i<string.length();++i){
int num = string.charAt(i)-'a';//获取当前字符的 对应的二进制数
if(((mask>>num)&1)==1){ //mask整体右移num位数,如果为1,表示当前字符已经出现过
System.out.println(string+"有重复字符,为:"+string.charAt(i));
break;
}else {
mask |= 1 << num; //否则,将mask num位数上 变为1并左移num位;
// 表示num二进制代表的字符,已存在
}
}
}
}
}
方法三:
思路:
我们创建一个大小为26的数组,arr[ ],存储每个字符对应出现次数。
遍历字符串的每一个字符,用字符串的字符减去一个字符‘a’ ,得到字符在字母表中的排序大小
arr[ 排序大小]++,最后遍历一遍数组arr,若存在arr[i]>2的情况,表示该字符出现过两次以上。
本文介绍了三种检测字符串中是否存在重复字符的方法。方法一利用String的indexOf()和lastIndexOf(),方法二运用位运算,方法三通过数组统计字符出现次数。这些方法分别展示了不同的思路和实现技巧。



2253

被折叠的 条评论
为什么被折叠?



