如何判斷字串是否含有重複字元
阿新 • • 發佈:2021-06-20
判斷字串是否含有重複字元共有幾種不同的方法
方法一:
思 路:
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的情況,表示該字元出現過兩次以上。