Odległość znaków - zadanie

0

NA wejściu otrzymujesz tablicę znaków W kolejnej linii należy pobrać dwa znaki, między którymi należy odnaleźć najmniejszą odległość

Wejście ABCCBAADDCAAABZB
A D

Wyjście
0

#include <iostream>
#include <string>
#include <vector>
using namespace std;
int main(){
	string napis;
	char p,k;
	int m, l=0, s, e;
	vector <int> f;
	cin>>napis;
	cin>>p>>k;
	for(int i = 0; i < napis.length() - 1; ++i){
		if(napis[i] == p){
			int j = i + 1;
			while(napis[j] != k){
				j++;
				l++;
			}
			f.push_back(l);
			l = 0;
		}
	}
	s = f.size();
	m = f.back();
	f.pop_back();
	for(int i=0; i < s-1; ++i){
		e = f.back();
		if(e < m) m = e;
		f.pop_back();
	}
	cout<<m;
	return 0;
}
0

Właśnie wydaje mi się, że wszystko działa, ale jeśli wrzucę to na stronę na której sprawdza, czy jest to dobrze zrobione, to mam 7/10 pkt

0

W tej wersji jest WA

#include <iostream>
#include <string>
#include <vector>
using namespace std;
int main(){
	string napis;
	char p,k;
	int m, l=0, s, e;
	vector <int> f;
	cin>>napis;
	cin>>p>>k;
	for(int i = 0; i < napis.length() - 1; ++i){
		if(napis[i] == p){
			for(int j = i + 1; j < napis.length(); ++j){
				if(napis[j] == k){
					break;
				}
				l++;
			}
			f.push_back(l);
			l = 0;
		}
	}
	s = f.size();
	m = f.back();
	f.pop_back();
	for(int i=0; i < s-1; ++i){
		e = f.back();
		if(e < m) m = e;
		f.pop_back();
	}
	cout<<m;
	return 0;
}
0

W drugiej wersji zwracasz zawsze 0

0

A czemu nie skorzystać z metod std::string jak np. find?

int find_nearest_pair(std::string const& str, char first, char second)
{
  int min_distance = str.length();
  auto pos_first = str.find(first);
  while (pos_first != str.npos) {
    if (auto pos_second = str.find(second, pos_first + 1); pos_second != str.npos) {
      if (auto distance = pos_second - pos_first; distance < min_distance) {
        min_distance = distance;
      }
    }
    pos_first = str.find(first, pos_first + 1);
  }
  return min_distance == str.length() ? -1 : min_distance - 1;
}

1 użytkowników online, w tym zalogowanych: 0, gości: 1