1. 程式人生 > >判斷一個字串裡面是否有重複的字元

判斷一個字串裡面是否有重複的字元

**題目要求:請實現一個演算法,確定一個字串的所有字元是否全都不同。這裡我們要求不允許使用額外的儲存結構。
給定一個string iniString,請返回一個bool值,True代表所有字元全都不同,False代表存在相同的字元。保證字串中的字元為ASCII字元。字串的長度小於等於3000。**
第一種解法:看到這道題目大家的第一想法就是判斷字串的長度是不是大於256,大於256那麼一定是會有重複的字元,不然的話兩個for迴圈,看看比較一下就行了,這樣的演算法時間複雜度是n*n (n<256)是一個常數,看起來效率也不差下面貼程式碼:

bool checkDifferent(string
iniString) { int len=iniString.length(); bool isDiff=true; if(len>256) return false; for(int i=0;i<len;i++) { for(int j=i+1;j<len;j++) { if(iniString[i]==iniString[j]) { isDiff=false
; break; } } } return isDiff; }

第二種方法:由於一共只有256個字元,所以完全可以建立一個長度為256的int陣列每一個儲存出現字元的ASCII碼,只要每次把出線的字元遞增就可以了,隨後判斷儲存的是不是大於1,是直接返回false,只需要一個for迴圈就可以了,這種方法的時間效率比第一種要高,因為它不用遍歷所有的字元,程式碼如下:

bool checkDifferent(string iniString) {
        int
a[256] = {0}; int len = iniString.length(), i; if(len > 256) return false; for(i = 0; i < len; i ++) { int x = iniString[i]; a[x] ++; if(a[x] > 1) return false; } return true; }

第三種方法:可以採用邊排序邊比較的方法,就是一邊快速排序一遍比較key與兩邊的元素是不是相同的,這種方法不是特別的好,但是比單純的排序比較妖快很多

bool quick_check(string &str,int low,int high){
        int first = low,last = high;
        if (high-low>256)
            return false;
        char key = str[first];
        if (low>=high)
            return true;
        while(first<last){
            while(first <last && str[last] >= key)
                last--;            
            str[first] = str[last];
            while(first<last && str[first] <= key)
                first++;
            str[last] = str[first];
        }
        str[first] = key;
        if (first>low && str[first] == str[first-1])
            return false;
        if (first<high && str[first] == str[first+1])
            return false;
        return quick_check(str,low,first-1) && quick_check(str,first+1,high);
    }

相關推薦

判斷一個字串裡面是否重複字元

**題目要求:請實現一個演算法,確定一個字串的所有字元是否全都不同。這裡我們要求不允許使用額外的儲存結構。 給定一個string iniString,請返回一個bool值,True代表所有字元全都不同,False代表存在相同的字元。保證字串中的字元為ASCII

mysql 函式 判斷一個字串裡面包含幾個其他的字元

1.mysql函式: 判斷一個字串裡面包含幾個‘;’ drop function if exists func_containumsplit; create function func_containumsplit(targetstr varchar(500)) returns INT beg

MySQL開發-判斷一個字串裡面包含幾個其他的字元,逐個獲取以分隔符間隔的字串

一、獲取一個字串中包含幾個指定的匹配字串 在儲存過程中要對一個字元中進行分割,獲取裡面以','分隔的各個字串,如: '0102_001956B_1,0102_001955A_1,0102_001954C_1,0102_001953D_1,0102_001952E_1'

java 判斷字串中是否重複字元

/** * 判斷字串是否包含重複字元 * @param str * @return */ public static boolean containRepeatChar(String st

java 判斷字串中是否重複字元

import numpy as np def checkDifferent(iniString): # write code here a = np.unique(iniString) if (a == iniString): retu

如何判斷一個字串是否由相同的字元組成

問題描述:由相同的字元組成是指組成兩個字串的字母以及各個字母的個數是一樣的,只是排列順序不同而已,例如“aaaabbc"與”abcbaaa"就由相同的字元組成的。下面描述判斷給定的兩個字串是否由相同的字元組成的方法。 方法一:排序法。最容易想到的方法就是對兩個字串中的字元進

在java中判斷一個字串中是否包含某個字元字串

一、contains方法 java.lang.String.contains() 方法返回true,當且僅當此字串包含指定的char值序列 此方法返回true,如果此字串包含,否則返回false。 public static void main(String[] args

判斷一個字串裡面的子串出現的次數

package day12; public class TextString5 { public static void main(String[] args) { Coun

判斷一個字串中含有某一字元個數新解

經常遇到要判斷某一字串中含有特定字元的個數問題,通常的做法是寫一個迴圈來遍歷字串,但是今天看到一種更高效的做法,如下:要判斷str中含有‘a‘字元的個數String str="abcdefghijklmn";char ch='a';System.out.println(str.length()-str.rep

Java判斷一個字串中是否包含中文字元工具類

Java判斷一個字串是否有中文一般情況是利用Unicode編碼(CJK統一漢字的編碼區間:0x4e00–0x9fbb)的正則來做判斷,但是其實這個區間來判斷中文不是非常精確,因為有些中文的標點符號比如:,。等等是不能識別的。 以下是比較完善的判斷方法:CharUtil.j

判斷資料庫某一個欄位用逗號分開裡面是否重複

String[] arr = goodsList.split(",");  //先擷取按照逗號擷取 for(int i = 0;i < arr.length-1;i++){ //迴圈開始元素 for(int j = i + 1;j < arr.length;j++){ //迴圈

python實現給定一個列表判斷裡面是否重複元素

題目很簡單,只是簡單溫習一個方法,most_common,這是collection模組中Counter類的方法,具體方法用法可以去查 下面是簡單的實現: #!usr/bin/env python #encoding:utf-8 ''' __Author__:沂水寒城

(ES6的“...“配合ES5‘’forEach‘’)前端面試之判斷一個字串中出現次數最多的字元,統計這個次數

// 判斷一個字串中出現次數最多的字元,統計這個次數 let str = 'aasdadddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddsdasjjhsghkafsagjkg

1.實現一個函式,可以左旋字串中的k個字元。 2.判斷一個字串是否為另外一個字串旋轉之後的字串

1.實現一個函式,可以左旋字串中的k個字元 ABCD左旋一個字元得到BCDA ABCD左旋兩個字元得到CDAB #include<stdio.h> #include<string.h> void left_move(char*str, int

js 判斷一個字串中出現次數最多的字元,統計其出現次數

js 判斷一個字串中出現次數最多的字元,統計其出現次數 var str = 'asdfssaaasasasasaa'; var json = {}; for (var i = 0; i < str.length; i++) { if(!json[str.charAt(i

判斷一個字串中出現次數最多的字元,統計這個次數

var str = 'asdfssaaasasasasaa'; var json = {}; for (var i = 0; i < str.length; i++) { if(!json[str.charAt(i)]){ json[str.cha

【演算法】判斷一個字串的所有字元是否全部不同 java程式碼實現

package com.billkang.algorithm; import java.util.HashSet; import java.util.Set; /** * * @author K

java中怎麼判斷一個字串中包含某個字元字串

var Cts = "bblText"; if(Cts.indexOf("Text") > 0 ) { alert('Cts中包含Text字串'); } indexOf用法:  返回 String 物件內第一次出現子字串的字元位置。         strObj.ind

java 判斷一個字串是否包含某個字元

一、contains方法 1:描述 java.lang.String.contains() 方法返回true,當且僅當此字串包含指定的char值序列 2:宣告 public boolean contains(CharSequence s)3:返回值 此方法返回true,如果

一個字串,其中包含中文字元、英文字元和數字字元,請統計和打印出各個字元的個數。

char[] c = { '6', 's', 'd', '7', 'g', '文', '中' }; int z = 0; int s = 0; int y = 0; for (char x : c) switch ((int) x / 10) { case 4: