Я решаю проблемы с примерами, одновременно пытаясь изучить Python% \ ... но проблема, с которой я столкнулась, имеет проблемы и решения на Java, поэтому я пытаюсь преобразовать между двумя языками. Я только что узнал, как работает бит-сдвиг, и я смотрел на этот код, пытаясь понять, что именно происходит здесь в строке 5 (и 8) ... Я попытался записать несколько примеров, просто проходя через код по строкам но почему-то это все еще не совсем очевидно для меня ... Не могли бы кто-нибудь прояснить?Может ли кто-нибудь объяснить, как в этом коде используется сдвиг?
Кроме того, это действительно странно для меня, что str.charAt(i)
возвращает символ, насколько я понимаю, и тогда вы можете перейти к вычесть его из другого персонажа как номера ... Является ли применение int
к характеру такой же, как в ord()
Python?
Проблема: Реализация алгоритма для определения строки имеет все уникальные символы.
решение (в случае только с символами A-Z):
1 boolean isUniqueChars(String str){
2 int checker = 0
3 for (int i = 0; i < str.length(); i++){
4 int val = str.charAt(i) - 'a';
5 if ((checker & (1 << val)) > 0){
6 return false;
7 }
8 checker |= (1 << val);
9 }
10 return true;
11 }
В Java символы представляют собой целочисленные 16-разрядные неподписанные типы и 'char-char -> int' (являющиеся целочисленной разницей между двумя [обычно кодовыми точками в BMP]). В случае Java нет «int применяется». Не удивительно, что 'str.charAt (i)' возвращает символ, потому что 1), что еще он вернет? и 2) задокументировано это. – user2864740
@ пользователь2864740, о, я вижу. Это было не str.charAt (i) возвращение символа, который был запутанным :) это была следующая операция. Но эта часть имеет смысл сейчас. То, что достигается сдвигом 1 по разнице, все же ускользает от меня. – Raksha