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

ค้นหาดัชนีของอักขระเฉพาะตัวแรกในสตริงที่กำหนดโดยใช้ C++


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

อินพุต-1

s = “tutorialspoint”

ผลผลิต

1

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

อินพุต-2

s = “aaasttarrs”

ผลผลิต

-1

คำอธิบาย − ในสตริงที่กำหนด “aaasttarrs” ไม่มีอักขระเฉพาะ ดังนั้น เราจะคืนค่าผลลัพธ์เป็น '-1'

แนวทางที่ใช้ในการแก้ปัญหานี้

ในการค้นหาดัชนีของอักขระที่ไม่ซ้ำตัวแรกในสตริงที่กำหนด เราสามารถใช้ hashmap . แนวคิดคือต้องอ่านอักขระทั้งหมดของสตริง และสร้าง hashmap โดยคีย์เป็นอักขระและค่าตามที่เกิดขึ้น

ขณะสำรวจผ่านอักขระแต่ละตัวของสตริง เราจะจัดเก็บข้อมูลการปรากฏของอักขระแต่ละตัวหากปรากฏ จะใช้เวลาเชิงเส้น 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'){
      mp[str[i]]++;
   }
   for(int i=0;i<s.size();i++){
      for(auto it= mp.begin();it!=mp.end();it++){
         if(it->first==str[i] && it->second==1){
            ans= i;
         }
      }
   }
   return ans;
}
int main(){
   string s= "tutorialspoint";
   cout<<uniqueChar(s)<<endl;
   return 0;
}

ผลลัพธ์

การเรียกใช้โค้ดด้านบนจะพิมพ์ผลลัพธ์เป็น

1

คำอธิบาย − สตริงอินพุต 'tutorialspoint' มีอักขระเฉพาะเช่น 'u', 'r' และ 'l' และอักขระเฉพาะตัวแรก 'u' มีดัชนี '1' ดังนั้นเราจึงได้ '1' เป็นผลลัพธ์