Во время ложного собеседования у меня возникает вопрос.Интервьюер сначала задает этот вопрос без каких-либо ограничений пространства.Затем он продолжил с ограниченным пространством версии.Быть на той же странице.В вопросе дана строка и класс контейнера, состоящие из разделителей.Это зависит от вас, чтобы выбрать подходящий класс контейнера и язык ответа.Я думаю, что пример ввода и вывода будет достаточно, чтобы понять, что на самом деле вопрос.
Ввод:
"Reverse#Strings Without%Changing-Delimiters"
Вывод:
"Delimiters#Changing Without%Strings-Reverse"
Обратите внимание, что: Положение "#", "%", "", "-" не изменено
Я нашел решение, приведенное ниже:
string ChangeOrderWithoutSpecial(string s, unordered_set<char> delimiter)
{
stack<string> words; // since last words outs first
queue<char> limiter; // since first delimiter outs first
string response =""; //return value
int index=-1; // index of last delimiter visited
int len=s.length();
for (int i =0 ; i <len;i++)
{
if(delimiter.find(s[i]) != delimiter.end()) // i-th char is a delimiter character
{
string temp=s.substr(index+1,i-index-1);
words.push(temp);
char t =s.at(i);
limiter.push(t);
index=i;
}
// i realized that part after interview under assumption starting with word and no double delimiters ie, each word followed by one delimiter
if(index!=s.length()-1)
{
string temp=s.substr(index+1,s.length()-index-1);//until the end;
cout<<temp<<endl;
words.push(temp);
}
while(!limiter.empty())
{
response+=words.top()+limiter.front();
words.pop();
limiter.pop();
}
response+=words.top();
return response;
}
Однако я не смог найти ao(1) космическое решение?Кто-нибудь знает как?Я также не мог выяснить, если есть несколько разделителей, которые также должны быть оценены.Спасибо, что потратили время даже на чтение.