Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

หาดัชนีของตัวอักษรที่ไม่ซ้ำกันตัวแรกในสตริงที่กำหนดโดยใช้ C++

ได้รับสตริง 's' งานคือหาตัวอักษรที่ไม่ซ้ำกันตัวแรกซึ่งไม่ได้ซ้ำในสตริงของตัวอักษรที่กำหนดและคืนค่าดัชนีของมันเป็นเอาต์พุต หากไม่มีตัวอักษรดังกล่าวในสตริงที่กำหนด เราจะคืนค่า '-1' เป็นเอาต์พุต ตัวอย่างเช่น

ตัวอย่างอินพุต 1

s = "tutorialspoint"

เอาต์พุต

1

คำอธิบาย

ในสตริงที่กำหนด "tutorialspoint" ตัวอักษรที่ไม่ซ้ำกันตัวแรกคือ 'u' ซึ่งมีดัชนี '1' ดังนั้นเราจะคืนค่า '1' เป็นเอาต์พุต

ตัวอย่างอินพุต 2

s = "aaasttarrs"

เอาต์พุต

-1

คำอธิบาย

ในสตริงที่กำหนด "aaasttarrs" ไม่มีตัวอักษรที่ไม่ซ้ำกัน ดังนั้นเราจะคืนค่าเอาต์พุตเป็น '-1'

วิธีการแก้ปัญหา

เพื่อหาดัชนีของตัวอักษรที่ไม่ซ้ำกันตัวแรกที่มีอยู่ในสตริงที่กำหนด เราสามารถใช้ hashmap แนวคิดคือผ่านตัวอักษรทั้งหมดของสตริงและสร้าง hashmap ด้วย Key เป็นตัวอักษรและ Value เป็นจำนวนครั้งที่เกิดขึ้น

ขณะวนลูปผ่านแต่ละตัวอักษรของสตริง เราจะเก็บจำนวนครั้งที่เกิดขึ้นของแต่ละตัวอักษรถ้ามันปรากฏ จะใช้เวลา O(n) แบบเส้นตรงในการเก็บจำนวนครั้งที่เกิดขึ้นของแต่ละตัวอักษร จากนั้นเราจะผ่าน hashmap และจะตรวจสอบว่ามีตัวอักษรใดที่ความถี่น้อยกว่า 2 หรือเท่ากับ '1' และเราจะคืนค่าดัชนีของตัวอักษรเฉพาะตัวนั้น

  • รับสตริง 's' เป็นอินพุต
  • ฟังก์ชัน Integer uniqueChar(string str) รับสตริงเป็นอินพุตและคืนค่าดัชนีของตัวอักษรที่ไม่ซ้ำกันตัวแรกที่ปรากฏ
  • วนลูปผ่านสตริงและสร้าง hashmap ของ char และจำนวนครั้งที่เกิดขึ้นขณะผ่านแต่ละตัวอักษรของสตริง
  • ถ้ามีตัวอักษรที่ความถี่น้อยกว่า 2 หรือเท่ากับ 1 ให้คืนค่าดัชนีของตัวอักษรเฉพาะตัวนั้น
  • ถ้าไม่มีตัวอักษรที่ไม่ซ้ำกันในสตริง ให้คืนค่า '-1' เป็นเอาต์พุต

ตัวอย่างโค้ด

#include <bits/stdc++.h>
using namespace std;

int uniqueChar(string str) {
    int ans = -1;
    unordered_map<char, int> mp;
    
    for (int i = 0; str[i] != '\0'; i++) {
        mp[str[i]]++;
    }
    
    for (int i = 0; i < str.size(); i++) {
        if (mp[str[i]] == 1) {
            ans = i;
            break;
        }
    }
    return ans;
}

int main() {
    string s = "tutorialspoint";
    cout << uniqueChar(s) << endl;
    return 0;
}

ผลลัพธ์

การรันโค้ดด้านบนจะพิมพ์เอาต์พุตเป็น

1

คำอธิบาย - สตริงอินพุท 'tutorialspoint' มีตัวอักษรที่ไม่ซ้ำกันคือ 'u', 'r', และ 'l' และตัวอักษรที่ไม่ซ้ำกันตัวแรก 'u' มีดัชนี '1' ดังนั้นเราได้ '1' เป็นเอาต์พุต