создать HashSet
и HashMap
: установить, отобразить и int
count = 0, выполнить итерацию по строке и добавить каждый символ и его индекс.в конце - значение каждого символа будет последним индексом.
повторите итерацию над строкой и проверьте, соответствует ли индекс указанному на карте.если это так (или персонаж появляется в наборе) - игнорируйте его.
если персонажа нет в наборе, а индексы как есть и как на карте не совпадают - увеличить количество (пока не достигнет n).
сложность: O (n)
public static Character findN(String str,int n) {
HashMap<Character, Integer> map = new HashMap<Character, Integer>();
int len = str.length();
for (int i=0;i<len;i++) {
map.put(str.charAt(i),i);
}
int count=0;
HashSet<Character> set = new HashSet<Character>();
for (int i=0;i<len;i++) {
if (set.contains(str.charAt(i))) continue;
if (map.get(str.charAt(i)) != i) {
count++;
if (count == n) return str.charAt(i);
set.add(str.charAt(i));
}
}
return null; //it does not exist
}