句子 是一个单词列表,列表中的单词之间用单个空格隔开,且不存在前导或尾随空格。每个单词仅由大小写英文字母组成(不含标点符号)。
例如,“Hello World”、“HELLO” 和 “hello world hello world” 都是句子。
给你一个句子 s 和一个整数 k ,请你将 s 截断 ,使截断后的句子仅含 前 k 个单词。返回 截断 s 后得到的句子。
示例 1:
输入:s = “Hello how are you Contestant”, k = 4
输出:“Hello how are you”
解释:
s 中的单词为 [“Hello”, “how” “are”, “you”, “Contestant”]
前 4 个单词为 [“Hello”, “how”, “are”, “you”]
因此,应当返回 “Hello how are you”
准备一个变量ans计数,遍历s的时候每遇到一个空格ans++,当遍历到底或者ans==k时结束遍历。用erase函数删除s.begin()+遍历到的下标-1到s.end()这段字符串,然后把剩下的字符串删除即可。
class Solution {
public:
string truncateSentence(string s, int k) {
int ans=0,l=0,n=s.size();
while(l
输入两个递增排序的链表,合并这两个链表并使新链表中的节点仍然是递增排序的。
示例1:
输入:1->2->4, 1->3->4
输出:1->1->2->3->4->4
归并排序嗷归并排序
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) {
ListNode*p=new ListNode(-1);
ListNode*o=p;
while(l1&&l2)
{
if(l1->valval)
{
o->next=l1;
l1=l1->next;
}
else
{
o->next=l2;
l2=l2->next;
}
o=o->next;
o->next=NULL;
}
while(l1)
{
o->next=l1;
l1=l1->next;
o=o->next;
o->next=NULL;
}
while(l2)
{
o->next=l2;
l2=l2->next;
o=o->next;
o->next=NULL;
}
return p->next;
}
};
输入两个链表,找出它们的第一个公共节点。
如下面的两个链表:
在节点 c1 开始相交。
示例 1:
输入:intersectVal = 8, listA = [4,1,8,4,5], listB = [5,0,1,8,4,5], skipA = 2, skipB = 3
输出:Reference of the node with value = 8
输入解释:相交节点的值为 8 (注意,如果两个列表相交则不能为 0)。从各自的表头开始算起,链表 A 为 [4,1,8,4,5],链表 B 为 [5,0,1,8,4,5]。在 A 中,相交节点前有 2 个节点;在 B 中,相交节点前有 3 个节点。
这里我们可以利用双指针的写法,一个p指向headA,一个q指向headB,开始准备两个指针同步走,每次判断一下,如果p为空就指向headB的开头,不为空p就往下走一格,q同理,为空指向headA,不为空就往下走。当p和q相等时,结束遍历。
原理:假设A的长度为n,B的长度为m,p先走完A后去走B,走过的长度为n+m,q先走完B后去走A,走过的长度为m+n,此时可以注意到,p和q走的长度是一样的,也就是说p和q最终一定会有相等的情况,如果有交点,那么第一个相遇的地方就会是交点,如果没有交点,那么最后p和q都会为NULL。不管那种情况,直接返回q或p的其中一个就可以。
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) {
if(!headA||!headB)return NULL;
ListNode*p=headA,*q=headB;
while(p!=q)
{
p=p==NULL?headB:p->next;
q=q==NULL?headA:q->next;
}
return q;
}
};