如何判斷字符串是否含有重復字符


判斷字符串是否含有重復字符共有幾種不同的方法

方法一:

思 路:

    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的情況,表示該字符出現過兩次以上。

 
        
 
        

 







免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM