Pressione e segure para entrar
Descrição do Problema
Seu amigo está usando o teclado para inserir o nome dele. Ocasionalmente, ao digitar o caractere c, a tecla pode ser pressionada por muito tempo e o caractere pode ser inserido uma ou mais vezes.
Você verificará os caracteres digitados no teclado. Se corresponder ao nome do seu amigo (alguns caracteres podem ser pressionados por muito tempo), retorna True.
exemplo:
Ideias para resolução de problemas
Use dois ponteiros para apontar para os caracteres do nome e digitados respectivamente. Se os caracteres apontados forem iguais, ambos os ponteiros irão avançar em 1. Se o caractere atualmente apontado por digitado for igual ao caractere anterior do nome, significa que pressionado por muito tempo. O ponteiro é +1, caso contrário, retorna falso.
class Solution {
public:
bool isLongPressedName(string name, string typed) {
int n=name.size(),m=typed.size();
if(name[0]!=typed[0] || name[n-1]!=typed[m-1])//提前判断一下开头和结尾
return false;
int i=1,j=1;
while(i<n){
if(name[i]==typed[j]){
i++;
j++;
}
if(name[i]!=typed[j]){
if(typed[j]==name[i-1])
j++;
else
return false;
}
if(j>m-1 && i<n) return false; //若typed已经到结尾了,但name还没到结尾,也返回false
}
return true;
}
};
Complexidade de tempo: O (m)
Complexidade do espaço: O (1)
Invalidação de endereço IP
Descrição do Problema
Fornece um endereço de endereço IPv4 válido e retorna a versão invalidada desse endereço IP.
A chamada invalidação de endereços IP está, na verdade, substituindo cada "." Por "[.]".
Ideias para resolução de problemas
Uma string adicional res é usada para armazenar o resultado. No loop, se não for ".", O caractere é adicionado diretamente a res, se for ".", [.] É adicionado a res. Finalmente, volte para res.
class Solution {
public:
string defangIPaddr(string address) {
int n=address.size();
string res="";
for(int i=0;i<n;i++){
if(address[i]=='.')
res=res+"[.]";
else
res=res+address[i];
}
return res;
}
};
Complexidade de tempo: O (n)
Complexidade do espaço: O (n)