I want to give Create , alter and drop permission to user A on a schema1 of a database
The safe way to do this is to make A owner of that Schema.
Granting a user the ability to alter another user's schema gives that user the ability to SELECT, INSERT, UPDATE and DELETE rows in any table owned by the owner of that schema. This is called "Ownership Chaining" and it's what makes Views and Stored Procedures really simple ways to control security, as a user who has permissions on a View or Stored Procedure does not need to be granted permissions on the underlying Table, so long as the View/Proc is has the same owner as the Table.
However in this scenario you can easily create a security hole with Ownership Chains. Generally you never want a user to be able to create objects that will be owned by a different (and especially a privileged) user.
EG, just granting CREATE TABLE, ALTER, and INSERT creates a security hole:
--drop database security_test
create database security_test
create schema schema1 authorization dbo
create user A without login
grant create table to A
grant alter, insert on schema::schema1 to A
create table dbo.secret(id int, msg varchar(200))
insert into dbo.secret(id,msg) values (1, 'secret data')
execute as user='A'
create table schema1.foo(id int)
create trigger t on schema1.foo after insert
select * from dbo.secret
insert into schema1.foo(id) values (1)
1 secret data