Bir satrda yagona harflarning sonini hisoblash

Ichida qancha noyob harflar mavjudligini hisoblovchi kod yozish kerak: masalan

"aabbcdefff"

Bu satrda 6 xil harflar mavjud bo'lgani uchun qaytariladi. Hozirda kodim bor:

  String letters = ("aabbcdefff");              
  char temp = ' ';
   for (int i = 0; i < letters.length(); i++){
      temp = inp.charAt(i);
      if (temp != ' ') {   //doesnt count spaces as letters
        alphabetSize = alphabetSize+1;
          for (int j = 0; j < inp.length(); j++){
            tempInp = tempInp.replace(temp,' ');
        }
      }
    }   

Ushbu kodning g'oyasi shundaki, u harfni aniqlashda, uning barcha nusxalarini bo'sh joy bilan almashtirish kerak. Biroq, bu kodni ishga tushirganimda, faqat menga mag'lubiyatning uzunligini beradi. Men noto'g'ri ish qilyapman? Buning uchun yana bir nafis uslub bormi?

Yordamingiz uchun rahmat.

1
agar siz noyoblikni istasangiz, "to'siq"
qo'shib qo'ydi muallif TheLostMind, manba

5 javoblar

Siz nafaqat to'siq yordamida yaxshi.

Yurakingiz ustidan aylantiring va har bir harfni to'plamingizga qo'shing. Keyinchalik, to'siqning uzunligini tekshiring va bajaring.

6
qo'shib qo'ydi
Bu amalga oshirish juda oson va joriy amaliyotingizga qaraganda kamroq vaqt murakkabligi bor.
qo'shib qo'ydi muallif martijnn2008, manba

Java 8 oqimli API bilan bitta liner:

long numberOfDistinctChars = s.chars().distinct().count()
1
qo'shib qo'ydi

Uni Linq xizmatidan foydalanib topishingiz mumkin.

Iltimos, ni foydalanib, System.Linq; Nomlar fazosi.

string str = "TestTest";
int cnt = str.ToLower().ToCharArray().Where(w => w != ' ').Distinct().Count();
1
qo'shib qo'ydi
savol java sifatida etiketleniyor - bu c #.
qo'shib qo'ydi muallif steve cook, manba

Siz buni Java to'plam (Set) yordamida osongina qilishingiz mumkin.

Set result = new HashSet();

    String letters = ("aabbcdefff");              
       for (int i = 0; i < letters.length(); i++){
          result.add(letters.charAt(i));
        }   

Sizning yakuniy natijangiz natijalar to'plamidir va u har doim noyobdir.

Reference: http://docs.oracle.com/javase/7/docs/api/java/util/Set.html

Rahmat.

0
qo'shib qo'ydi
Qanchadan-qancha, unutdim :)
qo'shib qo'ydi muallif Sanjaya Pandey, manba
Siz xarakter yoki char ishlatdingiz? Belgilardan foydalaning.
qo'shib qo'ydi muallif Sanjaya Pandey, manba
Set set = yangi HashSet (); Bu men uchun ishlaydi. import java.util.Set;
qo'shib qo'ydi muallif Sanjaya Pandey, manba
Keyin javobni qabul qiling, boshqalarga eng yaxshi javobni topishga yordam beradi.
qo'shib qo'ydi muallif Sanjaya Pandey, manba
Bu Set bo'lmasligi kerakmi?
qo'shib qo'ydi muallif schmop, manba
Rahmat, Lekin men chiziqni ishga tushirganimda "Set set = yangi HashSet ();" bu menga "tekshirilmagan va xavfli operatsiya" xatosini beradi, ammo bu savolni so'raydigan bir mavzuni o'qib chiqsam, noto'g'ri ish qilmayapmanmi?
qo'shib qo'ydi muallif user3628651, manba
"Set to'siq = yangi HashSet ();" va menga "HashSet" ustidan qizil quti berish
qo'shib qo'ydi muallif user3628651, manba
Men ishladim, HashSet import qilish kerak edi "import java.util.HashSet;" Rahmat
qo'shib qo'ydi muallif user3628651, manba

Buning bir usuli mag'lubiyatni bir qatorga aylantirish va keyin quyidagi usuli yordamida amalga oshiriladi:

    String s = "aabbcdefff";

    char[] charArray = s.toCharArray();

    ArrayList al = new ArrayList();


    for(char c : charArray){
        if(al.contains(c)){
            al.remove((Character)c);
        }else{
            al.add(c);
        }
    }

"Al" qatori ro'yxatida qolganlar nusxalar. Ushbu usulning afzalligi shundaki, u (n) ish vaqti mavjud

0
qo'shib qo'ydi