------
## 最终结论
```python
from collections import defaultdict
import bisect

def preprocess_t(t):
    char_positions = defaultdict(list)
    for index, char in enumerate(t):
        char_positions[char].append(index)
    return char_positions

def is_subsequence(s, t):
    char_positions = preprocess_t(t)
    current_position = -1
    
    for char in s:
        if char not in char_positions:
            return False
        positions = char_positions[char]
        # Find the first position in `positions` that is greater than `current_position`
        next_position_index = bisect.bisect_right(positions, current_position)
        if next_position_index == len(positions):
            return False  # No valid position found
        current_position = positions[next_position_index]
    
    return True

# Example usage:
print(is_subsequence("abc", "ahbgdc"))  # Output: True
print(is_subsequence("axc", "ahbgdc"))  # Output: False
```