力扣
有效字母的异位词
class Solution {
//使用哈希表,对字符串的字母进行投影
// a b c .....
// 0 1 2
// 投影完后,所采用的的就是ASCI码,字母相同就相约(一个++,另一个--)
// 最后为零就是说明两个字符串当中的会存在某个字母出现次数相同,即符合要求
public:
bool isAnagram(string s, string t) {
int record[26]={0};
for(int i=0;i<s.size();i++)//第一次循环确立a b c 等对应的映射
{
record[s[i]-'a']++;
}
for(int i=0;i<t.size();i++)//第二个循环确立是否出现次数相同的字母
{
record[t[i]-'a']--;
}
for(int i=0;i<26;i++)
{
if(record[i]!=0) return false;
}
return true;
}
};
旋转链表
力扣
/**
* 这道题的思路在于一点: 旋转链表,最好的方式是先把他首尾相连形成闭环
* 而后我要移动k位,那就是移动到 n-k 所在的位置
* 假设n=5,k=2 那么 1 2 3 4 5 ;循环之后嘛再移位的时候,1 就应该跑到3的位置对吧
* 但是我得确保是循环到本次表上,意思是 所形成的的循环链表的周期倍数
* 所以需要 n-k%n (在本程序中设置下标是0,所以是 n-k%n-1)
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode() : val(0), next(nullptr) {}
* ListNode(int x) : val(x), next(nullptr) {}
* ListNode(int x, ListNode *next) : val(x), next(next) {}
* };
*/
class Solution {
public:
ListNode* rotateRight(ListNode* head, int k) {
struct ListNode* tail = NULL;
struct ListNode* now = head;
struct ListNode* ret;
int cnt = 0;
int x = 0;
if(head == NULL) {
return NULL;
}
while(now) {
++cnt;
tail = now;
now = now->next;
}
tail->next = head;
now = head;
x = cnt - k % cnt - 1;
while(x--) {
now = now->next;
}
ret = now->next;
now->next = NULL;
return ret;
}
};