Can I use strings as identifiers in a Solidity mapping?

I want something like this:

```
contract C {
    mapping(string => mapping(address => uint)) public balances;
    string[] public tokennames; 
    mapping(string => uint) public tokennameIndex;
}

```

Each string will represent a different token balance. The list of tokens will be maintained (add, edit, remove, reorganize) by an admin account. One alternative for this is to use different contracts for each token, but a 2-D mapping somehow seems easier, given that storage will not be too big. Also it removes the need for a list of contract addresses. Does such an indexing make sense? Thanks!