Chúng tôi được cung cấp một chuỗi str [] làm đầu vào. Mục đích là đếm các từ trong str [] có cùng độ dài với str [] và có vị trí của các chữ cái sao cho chữ cái thứ i được thay thế bằng chữ cái ở vị trí (i1) hoặc (i) hoặc (i + 1).
Đối với chữ cái đầu tiên thay thế sẽ là từ vị trí i hoặc i + 1
Đối với chữ cái cuối cùng thay thế sẽ là từ vị trí i-1 hoặc i.
Hãy cho chúng tôi hiểu với các ví dụ.
Đầu vào - str [] =“TPP”
Đầu ra - Số lượng các từ có chữ cái thứ i là (i-1) -th, i-th hoặc (i + 1) chữ cái thứ của từ đã cho là - 4
Giải thích
Replacing T by T (i)th or 1st P (i+1)th = TPP, PPP Replacing 1st P by T (i-1)th, P (i)th, or P(i+1)th = TTP, TPP, TPP Replacing 2nd P by P(i-1)th or P(i)th = TPP, TPP Unique combination of replacements: TPP, PPP, TTP, PTP
Đầu vào - str =“aaa”
Đầu ra - Số lượng các từ có chữ cái thứ i là (i-1) -th, i-th hoặc (i + 1) chữ cái thứ của từ đã cho là:1
Giải thích
Replacing a by a (i)th or 2nd a (i+1)th = aaa, aaa Replacing 2nd a by a (i-1)th, a (i)th, or a(i+1)th = aaa, aaa, aaa Replacing 3rd a by a(i-1)th or a(i)th = aaa, aaa Unique combination of replacements: aaa
Cách tiếp cận được sử dụng trong chương trình dưới đây như sau
Chúng tôi biết rằng đối với mỗi bức thư, chúng tôi có ba khả năng. Nếu đối với ký tự i hiện tại, tất cả (i-1) th, ith, (i + 1) th khác nhau thì chúng ta có 3 lựa chọn. Nếu hai tùy chọn giống nhau, chúng ta có 2 tùy chọn, nếu tất cả đều giống nhau thì chỉ có một tùy chọn.
Vì vậy, chúng tôi sẽ duyệt qua chuỗi và kiểm tra tính duy nhất và nhân với 3, 2 hoặc 1 theo các chữ cái. Đối với chữ cái đầu tiên và chữ cái cuối cùng, chúng tôi sẽ kiểm tra tính duy nhất và nhân với 2 hoặc 1 theo cách tương tự.
-
Lấy chuỗi str [] dưới dạng một mảng ký tự.
-
Hàm Total (char str [], int length) lấy chuỗi và trả về số lượng các từ có ký tự thứ i là (i-1) -th, i-th, hoặc (i + 1) -th ký tự của từ trong str [].
-
Lấy số lượng ban đầu là 1. Chính từ trong str [].
-
Nếu có một chữ cái, độ dài sẽ là 1, trả về 1.
-
Kiểm tra ký tự đầu tiên ở chỉ mục 0. Nếu nó giống với ký tự thứ hai thì str [0] ==str [1] sau đó đếm đa số bằng 1
-
Nếu chúng khác nhau thì nhân số đếm với 2.
-
Bây giờ chuyển từ ký tự thứ 2 sang ký tự cuối cùng thứ hai bằng vòng lặp for từ chỉ mục i =1 đến i
-
Đối với mỗi chữ cái ở chỉ mục i. Kiểm tra xem str [i] có giống với str [i-1] hay str [i + 1] hay không. Nếu có, hãy nhân số đếm với 1.
-
Nếu hai bất kỳ giống nhau, nhân số đếm với 2.
-
Khác nhân số đếm với 3.
-
Đối với ký tự cuối cùng, hãy kiểm tra xem str [i-1] ==str [i]. Nếu đúng, nhân số đếm với 1. Khác nhân với 2
-
Cuối cùng, chúng ta sẽ có một số lượng các từ riêng biệt như vậy.
-
Kết quả là số lượt trả lại.
Ví dụ
#include<bits/stdc++.h> using namespace std; int total(char str[], int length){ int count = 1; if (length == 1){ return count; } if (str[0] == str[1]){ count = count * 1; } else{ count = count * 2; } for (int j=1; j<length-1; j++){ if (str[j] == str[j-1] && str[j] == str[j+1]){ count = count * 1; } else if (str[j] == str[j-1]){ count = count * 2; } else if(str[j] == str[j+1]){ count = count * 2; } else if(str[j-1] == str[j+1]){ count = count * 2; } else{ count = count * 3; } } if (str[length - 1] == str[length - 2]){ count = count * 1; } else{ count = count * 2; } return count; } int main(){ char str[] = "TPP"; int length = strlen(str); cout<<"Count of words whose i-th letter is either (i-1)-th, i-th, or (i+1)-th letter of given word are: "<<total(str, length) << endl; return 0; }
Đầu ra
Nếu chúng ta chạy đoạn mã trên, nó sẽ tạo ra kết quả sau -
Count of words whose i-th letter is either (i-1)-th, i-th, or (i+1)-th letter of given word are: 4