# Strings — डेटा स्ट्रक्चर और एल्गोरिदम

Source: https://www.geekswithgeeks.com/hi/dsa/strings

> वर्णों का array — अक्सर अपरिवर्तनीय, जो इन्हें बनाने का तरीका बदल देता है।

## अपरिवर्तनीयता मायने रखती है

Python, Java और JS में string जगह पर नहीं बदली जा सकती। लूप में `s += c` हर बार नई string बनाता है — कुल `O(n^2)`। वर्णों को list/`StringBuilder` में इकट्ठा करें और एक बार join करें।

## कुशलता से बनाएँ

list-और-join पैटर्न रैखिक है।

```python
# slow: O(n^2)
out = ""
for ch in text:
    out += ch.upper()

# fast: O(n)
parts = []
for ch in text:
    parts.append(ch.upper())
out = "".join(parts)
```

## सामान्य टूलकिट

आवृत्ति गणना (hash map / 26 का array), palindrome के लिए two pointers, substring के लिए sliding window, और anagram कुंजी के रूप में वर्ण sort करना।

**Quiz:** दो strings anagram हैं या नहीं, जाँचने का सबसे तेज़ तरीका?

- [ ] हर क्रमचय आज़माएँ
- [x] वर्ण गणनाओं की तुलना करें
- [ ] एक को उल्टा कर तुलना करें

*Answer:* वर्ण गणनाओं की तुलना करें. हर वर्ण गिनना O(n) है; क्रमचय O(n!) हैं।
