1. 模拟
两个指针分别指向name
和typed
即可。
时间O(m + n)
,空间O(1)
。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
| class Solution { public: bool isLongPressedName(string name, string typed) { int nameLen = name.length(), typedLen = typed.length(); int nameIdx = 0, typedIdx = 0; bool res = true;
while (res && (nameIdx < nameLen || typedIdx < typedLen)) { if (nameIdx == nameLen) { if (typedIdx == 0) res = false; else { while (typedIdx < typedLen) { if (typed[typedIdx] == typed[typedIdx - 1]) typedIdx++; else { res = false; break; } } } } else if (typedIdx == typedLen) res = false; else { if (name[nameIdx] == typed[typedIdx]) { nameIdx++; typedIdx++; if (nameIdx < nameLen && name[nameIdx] != name[nameIdx - 1]) { while (typedIdx < typedLen && typed[typedIdx] == typed[typedIdx - 1]) typedIdx++; } } else res = false; } }
return res; } };
|