如何判断字符串是否含有重复字符
判断字符串是否含有重复字符共有⼏种不同的⽅法
⽅法⼀:
思路:
    String string = "helloworld"
    1.将字符串转换成字符数组, char[ ]arr = CharArray( );
    2.从字符串第⼀个字符开始遍历,
    通过判断当前字符第⼀次出现的下标,是否等于最后⼀次出现的下标,来判断字符是否重复。
    利⽤String⽅法  indexOf( )和lastIndexOf( )
实现代码:
public class Test{
public static void main(String[]args){
/**
* 判断字符串是否含有重复字符:
*    1.⾸先将字符串转成字符数组
*    2.利⽤ indexof 与 lastindexof 判断字符是否重复
*/
String string = "helloworld";
char[]arr = CharArray();
for(char ch:arr) {
if (string.indexOf(ch) != string.lastIndexOf(ch)) {
System.out.println("字符串含有重复字符");
break;
}
}
}
}
⽅法⼆:  位运算:      >>右移运算符,⼆进制位全部右移若⼲位多余则舍弃右边位数      <<;左移运算符,⼆进制位全部左移若⼲位不⾜则补0            假设要判断的字符串全部由⼩写英⽂字母组成    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的情况,表⽰该字符出现过两次以上。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。