三月算法(二)

26 篇文章 0 订阅

力扣

有效字母的异位词

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;
}
    
};

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值